Int类型的最小值取负后值不变

日常刷LeetCode,碰到myPow这道题,就是求一个数的次方运算。

本来以为很简单的,写完后就直接提交了。结果发现测试用例为-2147483648的时候报错了。检查了一遍代码,并没有发现逻辑错误,这时候感觉有点蒙。然后把代码在本机上debug了一遍才终于发现原因,在对-2147483648数值进行取负操作的时候,值并没有改变还是-2147483648。


感觉有点好奇,就自己研究了一下,结论如下:

int型范围是“-2147483648(0x80000000)”到“2147483647(0x7FFFFFFF)”,当计算机进行取负操作时是将每一位取反然后+10x80000000按每位取反后是0x7FFFFFFF,加一之后还是0x80000000,所以当对(int型)-2147483648数进行取负数操作时,值还是它本身

同理也可以证明2147483647+1=-2147483648,计算器验证也是没错的Int类型的最小值取负后值不变


Int类型的最小值取负后值不变


Int类型的最小值取负后值不变


Int类型的最小值取负后值不变