1. 程式人生 > >int型資料型別為什麼取值範圍是-2^31~2^31-1

int型資料型別為什麼取值範圍是-2^31~2^31-1

正數在計算機中表示為原碼,最高位為符號位:

1的原碼為0000 0000 0000 0000 0000 0000 0000 0001

2147483647的原碼為0111 1111 1111 1111 1111 1111 1111 1111

所以最大的正整數是2147483647

負數在計算機中表示為補碼,最高位為符號位:

-1的原碼為1000 0000 0000 0000 0000 0000 0000 0001,

反碼為1111 1111 1111 1111 1111 1111 1111 1110,

補碼為1111 1111 1111 1111 1111 1111 1111 1111

-2147483647:

原碼為1111 1111 1111 1111 1111 1111 1111 1111,

反碼為1000 0000 0000 0000 0000 0000 0000 0000,

補碼為1000 0000 0000 0000 0000 0000 0000 0001

所以最小的負數是-2147483647嗎?錯,不是。

在二進位制中,0有兩種表方法。

+0的原碼為0000 0000 0000 0000 0000 0000 0000 0000,

-0的原碼為1000 0000 0000 0000 0000 0000 0000 0000,

因為0只需要一個,所以把-0拿來當做一個最小的數-2147483648。

-2147483648的補碼錶示為1000 0000 0000 0000 0000 0000 0000 0000,在32位沒有原碼。

注意,這個補碼並不是真正的補碼,真正的補碼是1 1000 0000 0000 0000 0000 0000 0000 0000,溢位。

所以帶符號32位int型別整數為-2147483648~2147483647

最後自己貼一張圖就當做是時刻提醒自己吧