添加两个正整数给出否定答案。为什么?

时间:2015-06-19 08:59:10

标签: c++

#include<iostream>

using namespace std;

int main(){

  int x = 1967513926;
  int y = 1540383426;

  cout<<x+y;

return 0;
}

上述两个整数的和是3507897352&lt; 2 ^ 32.所以为什么错误回答? 请帮忙......

4 个答案:

答案 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,它可以为您提供所需的最大尺寸。

希望这会有所帮助!!

干杯!!