c++中負數存儲時,不是簡單的將符號位置為1,而是采用補碼的形式存儲的:負數最高位為符號位,也就是1,其余全部取反,然後再加1。
假如操作系統是32位,-1的二進制存儲不是:1000000000000001,而是:1111111111111110+1即1111111111111111。
C語言中printf("%u")表示按無符號數形式輸出壹個整數。現在的機器壹般為32位或64位機,整數存儲占4個字節,壹個字節8位,***計32位。整數在計算機中以補碼形式存儲,-1的補碼為32個1組成的二進制數,按無符號數輸出這個二進制數,就是2^32-1=4294967295。
由於采用補碼表示整數,計算機本身不關心整數是正數還是負數,統壹按無符號數對待。具體輸出時,顯示為什麽數,計算機按編程者的格式要求進行處理輸出。如32個1組成的二進制數,按%d輸出就是-1,按無符號輸出就是4294967295。在計算機中,可以區分正負的類型,稱為有符號類型(signed),無正負區分的類型,稱為無符號類型(unsigned)。有符號類型數據的最高位表示符號,1表示正,0表示負。