1. 程式人生 > 其它 >c語言中單位元組資料轉換為多位元組資料需要補符號位

c語言中單位元組資料轉換為多位元組資料需要補符號位

技術標籤:c語言

我們在該文中分析了uchar/char的範圍及越限情況。

期間有個現象在這裡分析以下:

我們發現,uchar以十六進位制的形式輸出是FF,但是char型別以十六進位制輸出的是ff ff ff ff

     uchar ch1 = 0xFF;

    char ch2 = 0xFF;

    printf("%d,%d\n%X,%x\n",ch1,ch2,ch1,ch2);
    printf("%d",sizeof(int));

分析:編譯器是32位的,所以是 ff ff ff ff,共32位,4個位元組。又因為,對於char型別,ff(1111 1111),首位是1,故為負數,所以,拓展成4個位元組後,前面全是1

具體可參考本文

總結規律:

如果char型別的最高位是1,則轉換成多位元組數時:其餘位元組包括該位元組高位的0,全都補1,即十六進位制數都是F。

如果char型別的最高位是0,則轉換成多位元組數時,其餘位元組包括該位元組高位的0全都補0,即十六進位制數都是0,預設是不寫的。

其實質是,算補碼時,取反加1造成的。

此外,char與多位元組的位運算(即,強轉成多位元組時),以及如下的位移運算也算牽扯到補符號位的問題。