-
java中int型占4个字节, 一个字节8位,共计32位
int型取值范围是[-2^31, +2^31-1]
最大的数 2^31-1对应的十六进制是0x7FFFFFFF
转换为二进制就是 0111 1111 1111 1111 1111 1111 1111 1111 -
最大的数 2^31-1如果再加1,则会发生溢出, 此时这个值并不是 2^31, 是多少呢?
这样计算:
此时对应的二进制数: 1000 0000 0000 0000 0000 0000 0000 0000
减1操作后: 0111 1111 1111 1111 1111 1111 1111 1111
取反操作后: 1000 0000 0000 0000 0000 0000 0000 0000
此时这个数对应的正数为: 2^31
那么这个数代表的负数为:-2^31 -
再计算一个普通的数: 0xFF000001
这个数对应的二进制: 1111 1111 0000 0000 0000 0000 0000 0001
减1操作后: 1111 1111 0000 0000 0000 0000 0000 0000
取反操作后: 0000 0000 1111 1111 1111 1111 1111 1111
此时该数对应的正数为:2^24 - 1
那么这个负数就是: -2^24 + 1=-16777215
网友评论