看看这段代码:
void main ()
{
int i = -1;
unsigned u = 1;
cout << u + i;
}
添加u(无符号)和i(有符号),所以我必须转换为无符号类型,因此它应该被解释((2 ^ 32) - 1)并且表达式应该从: -1 + 1到((2 ^ 32) - 1)+ 1但是当我运行代码时,结果为0 为什么呢?
答案 0 :(得分:6)
-1
无符号表示最大可能号码无符号可以保留(UINT_MAX
)。
由于unsigned
的属性,为此包含了1,因此等于0。
答案 1 :(得分:1)
(无符号)-1是0xFFFFFFFF。 1 + 0xFFFFFFFF = 0x100000000溢出int,结果为0。