#include <iostream>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int num=-2147483648;
int positivenum=-num;
int absval=abs(num);
std::cout<<positivenum<<"\n";
std::cout<<absval<<"\n";
return 0;
}
嗨,我很好奇为什么上面代码的输出是
-2147483648
-2147483648
现在我知道
-2147483648
是有符号整数中最小的可重现数字(假设int
是32位)。我本以为只有在我们低于这个数字时,才会得到垃圾答复。但是在这种情况下,+ 2147483648 IS被32位整数系统覆盖。那么,为什么在两种情况下都给出否定答案? 最佳答案
不太正确。它只会上升到+2147483647。所以你的假设是不对的。
否定-2147483648
确实会产生2147483648
,但是它将溢出回到-2147483648
。
此外,有符号整数溢出在技术上是未定义的行为。
关于c++ - 在C/C++中无法否定-2147483648?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8372049/