负数取绝对值不一定是正数 - Java基础

184 阅读1分钟

对负整数-2147483648取绝对值,得到-2147483648

Java中,有符号整数采用补码形式表示
补码:正数补码等于原码,负数补码最高符号位不变,其余位取反,然后+1

Integer的取值范围是-2^32(-2147483648) -- 2^32-1(2147483647)

-2147483648 的原码 11111111 11111111 11111111 11111111   
-2147483648 的补码 10000000 00000000 00000000 00000001 

对-2147483648取绝对值得到2147483648(发生溢出)

2147483648  的原码 11111111 11111111 11111111 11111111  
2147483648  的补码 10000000 00000000 00000000 00000001 

恰好2147483648的补码等于-2147483648的补码,故为负数

参考资料

Hollis 大神的《2023全新Java面试宝典课程,八股文学习资料》