添加有符号和无符号整数

时间:2018-06-10 18:24:40

标签: c++

我想将一个signed int添加到unsigned int:

int num1=20; //Signed
unsigned  num2=-10; //Unsigned
printf("%u",num1+num2);

我的理解:

当我们将signed(int,long,long long)添加到相同等级的无符号时,则unsigned始终获得最高优先级。因此,num2将更改为 4294967286 ,并且在无符号转换后num1将保持为20。加法应该是 4294967306。但答案是10。

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

1 个答案:

答案 0 :(得分:0)

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

num2 + 20 = 2^32 - 10 + 20 = 2^32 + 10 = 10

最后一步是由于溢出,因为您的变量存储在32位数据类型中。进一步阅读

https://en.wikipedia.org/wiki/Integer_overflow