main( )
{ unsigned a=32768;
   printf(“a=%d\n”,a); }

答案是 a=-32768。

首先,unsigned是表示一個(gè)變量(或常數(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í),由于最高位表示符號數(shù),因此可以理解其為一個(gè)負(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ù)述.歡迎大家一起討論