C++ 把长的数字相加会得到负的结果吗?

C++ 把长的数字相加会得到负的结果吗?,c++,C++,当我尝试将两个长数字相加时,结果是负数: #include<iostream> using namespace std; int main () { int a=1825228665; int b=1452556585; cout<<a+b; return 0; } 这种类型的东西太多了。当您添加两个大数字时,结果无法存储在所选类型中,它会溢出。在大多数情况下,它会包装数字,但在标准中没有定义。因此,在某些编译器中,结果是未定义的 对于int和其他数值类型,当程

当我尝试将两个长数字相加时,结果是负数:

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

这种类型的东西太多了。当您添加两个大数字时,结果无法存储在所选类型中,它会溢出。在大多数情况下,它会包装数字,但在标准中没有定义。因此,在某些编译器中,结果是未定义的

对于int和其他数值类型,当程序不能在其中存储这么大的数字时,我们可以看到它溢出

假设int可以存储-10到10之间的数字,当您执行此操作时:

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

您将在
b
中得到-10或一些随机值(它可以是任何值,因为结果未定义)

这是因为结果溢出。因为数字签名数据类型中的第一位用于符号表示。具体的表示形式称为二的补码()。实际上,该位中的1对应于-,而0对应于+。这个问题的解决方案是使用更大的数据类型,如long。较大表示用于存储它的内存较大,因此值的范围增大。

是否尝试使用
无符号int
替代?整数溢出,您超过了整数的最大值(特定于编译器/os)整数常量对于“long”太大type@PanagiotisKanavos无符号整数可以正常工作。结果大约是32亿,在一个无符号32位整数的范围内。@JoachimPileborg我不认为这个问题与具体的值有关
int
s很小,很容易出现溢出错误。此外,
int
不能保证为32位。该标准规定了最小大小:int为16位,longI为32位,其给定值为11。您的第一句话是:当算术运算产生无法在类型中表示的值时,行为是未定义的。大多数实现都是包装的,但根本不需要包装。好的,James Kanze,谢谢。你是right@Himanshu这是因为您的
int
可能存储的不仅仅是
[-10,10]
。我用了很长时间,但也不起作用,如何将变量声明为ULL?我试过不带符号的long-long-int-a,但没用。请换个问题问
int a = 10;
int b = a+1;