根据上机亲测,如有疑问可以评论!
先看懂二进制之间的运算
- 由负数得补码
- 由负二进制补码数得负数
如图
解析:
-5 byte类型
源码---1000 0101 由101补齐得到
负数求补码遵循 取反加1 得-5补码------1111 1011
计算机存着二进制1111 1011求值
计算机以补码存负数,所以这个是负数
对补码求源码,反过来原则:减一再取反 减一:1111 1010 取反:10000101
源码直接求值:-5
数据超出范围
常见的数据范围
示范int值超出范围
代码
输出
解析:
int i取最大值时 在计算内表示二进制为0111 1111 1111 1111 最大值为2^15-1=2147483647
上面题进行++后,显然i为2147483648超出最大值1
二进制从0111 1111 1111 1111 + 1 ==== 1000 0000 0000 0000
也就是从正数变成了一个负数
这样子,答案揭晓,也就是对二进制负数求值的过程
求源码
减一:0111 1111 1111 1111
取反:-1000 0000 0000 0000
值为:-2^15
有疑问参考:
补码:0111 1111 1111 1111 + 2 == 1000 0000 0000 0001
源码:1111 1111 1111 1111 ===== -(2^15-1)