c語言中單位元組資料轉換為多位元組資料需要補符號位
阿新 • • 發佈:2021-02-02
技術標籤: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與多位元組的位運算(即,強轉成多位元組時),以及如下的位移運算也算牽扯到補符號位的問題。