不同資料型別在程式中的表現形式

墮落小生發表於2015-06-10

首先,這是一個小白文

最近在看《程式是怎麼跑起來的》裡面有一段程式碼

如下 因為編譯器的原因,所以程式碼跟書上有些不同,不要介意 程式碼在書上52頁

#include<stdio.h>
#include<string.h>

int main()
{
    float data;
    unsigned long buff;
    int i;
    char s[34];

    //將0.75以單精度浮點數的形式儲存在變數date中。
    data = (float) 0.75;

    //把資料複製到4位元組唱的的整數變數buff中以諸葛提取出每一位。 
    memcpy(&buff,&data,4) ;

    //逐一提取出每一位
    for(i=33;i>=0;i--) 
    {
        if(i==1||i==10)
        {
           s[i]='-';
        }
        else
        {
             //為各個位元組賦值'0'或者'1'。 
            if(buff%2==0)
            {
                s[i]='0';
            }
            else
            {
                s[i]='1';
            }
        }
        buff/=2;
    }
    s[34]='\0';
    //顯示結果。
    printf("%s\n",s) ;
    return 0;
}

這段程式碼工作正常,如下

enter image description here

然後我把其中為各個位元組賦值那幾行改成了這樣

s[i] = buff % 2;

然後程式就不能正常輸出了

分析後發現程式輸出字串的時候遇到0自動終止,於是我有把程式改成了這樣

s[i] = buff % 2 + 48;//把數字轉成ascii碼。

程式可以正常工作了

這次的問題是忽略了不同資料格式的表現形式也不相同的問題,引以為戒。

相關文章