添加长数字会给我减去结果吗?

时间:2014-04-10 12:42:12

标签: c++

当我尝试添加两个长数字时,它会给我减去结果:

#include<iostream>
using namespace std;
int main ()
{
 int a=1825228665;
 int b=1452556585;
 cout<<a+b;
 return 0;
}

这给了我:

-1017182046

2 个答案:

答案 0 :(得分:0)

这种类型的溢出。当你添加两个大数字,结果无法存储在所选类型中时,它会得到超额收益。在大多数情况下,它会包含数字,但它没有在标准中定义。所以在某些编译器中,结果是未定义的。

对于int和其他数字类型,当程序无法在其中存储这个大数字时,我们可以看到它溢出。

让我们说int可以存储从-10到10的数字,当你这样做时:

int a = 10;
int b = a+1;

你会得到b中的-10或一些随机值(它可以是任何东西,因为结果是未定义的)

答案 1 :(得分:0)

那是因为结果溢出了。由于数字签名数据类型中的第一位用于符号表示。具体表示称为二补(Wikipedia article here)。实际上,此位中的1映射到 - 而0到+。这个问题的解决方案是使用更长的数据类型。它越大意味着用于存储它的内存越大,因此值的范围越大。

相关问题