我想将一个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。
我认为这是一种糟糕的编码方式,因为它会造成混乱。但是,我仍然想知道我哪里出错了。
答案 0 :(得分:0)
确实,num2
代表数字4294967286 = 2^32 - 10
。当您将20
添加到该号码时,您将获得
num2 + 20 = 2^32 - 10 + 20 = 2^32 + 10 = 10
最后一步是由于溢出,因为您的变量存储在32位数据类型中。进一步阅读