c++ 中有+0和-0区别吗?为什么short int 最小值是-2^15?最高位表示符号位,两个字节最小值:1111
1个回答

负数用补码存储

负数的补码等于其绝对值的二进制取反加上1

比如-1

其绝对值1=0000 0000 0000 0001

取反 1111 1111 1111 1110

加1 1111 1111 1111 1111

所以-1是1111 1111 1111 1111不是最小值

最大值是0111 1111 1111 1111(32767)

最小值是-32768

绝对值 1000 0000 0000 0000(超过了最大值32767)

取反 0111 1111 1111 1111

加1 1000 0000 0000 0000

最小值是1000 0000 0000 0000

采用补码是为了方便做加法和减法,减法就是加上相反数

-1和+1相加产生的最高进位被舍弃,

同时0的表示统一为0000 0000 0000 0000