#include <iostream>
int main ()
{
using namespace std;
unsigned int i = 4;
int a = -40;
cout<<a+i<<endl;
return 0;
}
执行此操作会给我4294967260
我知道发生了转换,从signed int到unsigned int, 但这个特殊价值如何以及为何如此? 我注意到它接近于|的总和2147483647 | + 2147483647
答案 0 :(得分:9)
当unsigned int
和int
加在一起时,int
会在添加之前首先转换为unsigned int
(结果也是{{} 1}})。
-1,虽然是第一个负数,但实际上相当于最大的无符号数 - 即unsigned int
。
-2为(unsigned int) -1 === UINT_MAX
,依此类推,所以UINT_MAX - 1
(使用32位整数时)。
当然,添加4然后给出你的答案:
-40 === UINT_MAX - 39 === 4294967256
。
这是一个很棒的测验,你可以在C中学习一些整数规则(以及类似的C ++):http://blog.regehr.org/archives/721
答案 1 :(得分:1)
以十六进制表示i和a:
i = 4: 0x 0000 0004
a = -40: 0x FFFF FFD8
遵循C ++的隐式转换规则, a + i 中的 a 将转换为unsigned int,即4294967256.所以 a + i = 4294967260 强>