int 取值范圍
參考:
https://zhidao.baidu.com/question/16560454.html
原碼/反碼/補碼
原碼: 最高位為符號位(0表示正, 1表示負)
反碼: 對於一個帶符號的數來說, 正數的反碼與其原碼相同, 負數的反碼為其原碼除符號位以外的各位取反
補碼: 正數的補碼與其原碼相同, 負數的補碼為其反碼在最低為加1
計算機中采用補碼形式存儲數據, 0的補碼表示只有一種
int
C#
中 int
占4個字節, 32位
最大0111 1111 1111 1111 ...
== 2^31 - 1
最小1111 1111 1111 1111 ...
== - (2^31 - 1)
轉為補碼為1000 0000 0000 ... 0001
, 但是補碼中會比原碼中多出一個編碼,
這個編碼就是1000 0000 0000 ... 0000
,
因為任何一個原碼都不可能轉化為補碼時變為1000 0000 0000 ... 0000
, 取反加1溢出
所以人們規定這個補碼就為- (2^31 - 1) - 1 == -2^31