#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/

10-12 16:06