添加有符号和无符号整数

Adding signed and unsigned integers

本文关键字:无符号整数 符号 添加      更新时间:2023-10-16

我想将有符号的 int 添加到无符号的 int:

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

我的理解:

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

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

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

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

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

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