#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;
}
Run Code Online (Sandbox Code Playgroud)
嗨,我很好奇为什么输出上面的代码是
-2147483648
-2147483648
Run Code Online (Sandbox Code Playgroud)
现在我知道这-2147483648是签名的int中最小的可重复数字(假设int是32位).我会假设只有在我们低于这个数字后才会得到垃圾回答.但在这种情况下,+ 21148383648由32位整数系统覆盖.那么为什么两种情况下的否定答案呢?
Mys*_*ial 15
但在这种情况下,+ 21148383648由32位整数系统覆盖.
不太正确.它只能达到+2147483647.所以你的假设是不对的.
否定-2147483648确实会产生2147483648,但它会溢出回来-2147483648.
此外,有符号整数溢出在技术上是未定义的行为.