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