main( )
{ unsigned a=32768;
printf(“a=%d\n”,a); }
答案是 a=-32768。
首先,unsigned是表示一個變量(或常數(shù))是無符號類型。signed表示有符號。
unsigned & signed I
? 無符號數(shù)的數(shù)值范圍0-65535,有符號數(shù)的數(shù)值范圍在-32768- +32767之間.所以有符號運(yùn)算比無符號運(yùn)算耗資源.
‚ 無符號數(shù)32768的二進(jìn)制形式為1000 0000 0000 0000.
ƒ 在轉(zhuǎn)換為有符號數(shù)時,由于最高位表示符號數(shù),因此可以理解其為一個負(fù)數(shù)。負(fù)數(shù)采用2的補(bǔ)碼(two's complement)表示。“要把內(nèi)存中以補(bǔ)碼形式存放的二進(jìn)制碼轉(zhuǎn)換成十進(jìn)制的負(fù)數(shù)步驟如下:
1.先對各位取反
2.將所得的二進(jìn)制數(shù)轉(zhuǎn)換成十進(jìn)制數(shù)
3.因?yàn)樽罡呶粸?,因此在所得的十進(jìn)制數(shù)前面加負(fù)號.
4.對所求得的數(shù)再減1,即可.
„ 按照上面的步驟:各位先取反,0111 1111 1111 1111 ;再轉(zhuǎn)為十進(jìn)制數(shù),32767;再在所得的數(shù)前加負(fù)號,-32767;再減1,即為-32767-1=-32768.。
unsigned & signed Ⅱ
main()
{ int b=-2;
printf(“b=%u”,b); }
答案是b=65534。
其具體步驟為:
Œ先取-2的絕對值2的原碼:0000 0000 0000 0010
?將其轉(zhuǎn)換為反碼:1111 1111 1111 1101
?加1補(bǔ)碼:1111 1111 1111 1110
十進(jìn)制形式就是無符號數(shù) 65534
這就是我理解后的復(fù)述.歡迎大家一起討論