Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/159.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 添加有符号和无符号整数_C++ - Fatal编程技术网

C++ 添加有符号和无符号整数

C++ 添加有符号和无符号整数,c++,C++,我要将有符号整数添加到无符号整数: int num1=20; //Signed unsigned num2=-10; //Unsigned printf("%u",num1+num2); 我的理解是: 当我们将有符号(int,long,long-long)添加到相同秩的unsigned时,unsigned总是得到最高的优先权。因此,num2将更改为4294967286,num1在无符号转换后将保持20。加起来应该是4294967306。但答案是10 我认为这是一种糟糕的编码方式,因为它会造成

我要将有符号整数添加到无符号整数:

int num1=20; //Signed
unsigned  num2=-10; //Unsigned
printf("%u",num1+num2);
我的理解是:

当我们将有符号(int,long,long-long)添加到相同秩的unsigned时,unsigned总是得到最高的优先权。因此,num2将更改为4294967286,num1在无符号转换后将保持20。加起来应该是4294967306。但答案是10


我认为这是一种糟糕的编码方式,因为它会造成混乱。但是,我仍然想知道我错在哪里。

事实上,
num2
将代表数字
4294967286=2^32-10
。当您将
20
添加到该数字时,您将得到

num2 + 20 = 2^32 - 10 + 20 = 2^32 + 10 = 10
最后一步是由于溢出,因为变量存储在32位数据类型中。供进一步阅读


< /P>为什么你期望在32位整数运算中得到大于2 ^ 32的结果?这可能是有用的:C和C++是两种非常不同的语言,尤其是当涉及到语义时。请选择一种语言。@BaummitAugen:Oops!!你说得对。这是个愚蠢的问题。我应该检查一下。Thanks@FeiXiang无符号整数数学不会溢出。它包起来了。