有符號整數能表示的最大整數值只有最大無符號整數的一半,怎麼理解?
舉個例子,假設使用 8 位表示數字,如果是無符號數,最大值為 1111 1111,換算成十進位為 255,如果是有符號數,最大值為 0111 1111(以 1 打頭的數是負數),換算成十進位為 127,
127 差不多是 255 的一半
總結:
對於 n 位數字,所能表示的數的個數都是 ,因為還要表示 0,所以,如果要表示無符號的數,最大數為 ,如果要表示有符號的數,首先砍掉一半的負數,再減去 0,所以,最大值為 ,即 差不多是 的一半
推薦《深入理解計算機系統》
一個是 31位 表示數字, 一位 為符號。 - 2^31 ~ 2^31-1
另一個 就是32位表示, 沒有符號, 2^32
所以 看似是一半
實際上 數量是一樣的。 都是 2^32 個數據。
int取值範圍是-2的31次方減1到2的31次方減1
unsigned int 範圍是2的31次方減一
這不就是一半麼
最高位作為符號!
看計算機原理應該有!
32位整數只有2的32次方的表示空間,有符號整數只要正數負數一半一半,無符號整數正數佔用了整個空間,當然出現這種情況。
推薦閱讀: