#include<iostream>
using namespace std;
int main(){
int x = 1967513926;
int y = 1540383426;
cout<<x+y;
return 0;
}
上述两个整数的和是3507897352&lt; 2 ^ 32.所以为什么错误回答? 请帮忙......
答案 0 :(得分:7)
int
是签名类型,因此maximum是2 ^ 31 - 1 = 2147483647,而不是2 ^ 32 - 1.所以你做得到溢出在这种情况下。
答案 1 :(得分:4)
当您溢出int
类型时,程序的行为未定义:
C ++ 11标准的第5/4段(关于任何表达式):
如果在评估表达式期间,结果不是 在数学上定义或不在可表示值的范围内 它的类型,行为是未定义的。 [...]
在尝试求和之前,检查参数的限制(std::numeric_limits
在这里很有用。)
或者,您可以使用unsigned
类型:溢出这些类型是安全的,因为标准声明它们将在达到最大值时回绕到0。
答案 2 :(得分:3)
int
的限制为2.147.483.647
你只是满溢而已。
当你这样做时(在int
上)2.147.483.647 + 1.这给你-2147483648。 ;)
答案 3 :(得分:0)
迪帕克,
请检查int提供的最大限制,如果你的总和高于它,这将不起作用,你必须增加整数值的长度。
您可以尝试使用numeric_limits,它可以为您提供所需的最大尺寸。
希望这会有所帮助!!
干杯!!