签到未签名的演员

时间:2012-05-18 21:51:40

标签: c++ types unsigned signed

看看这段代码:

void main ()
{
int i = -1;
unsigned u = 1;

cout << u + i;
}

添加u(无符号)和i(有符号),所以我必须转换为无符号类型,因此它应该被解释((2 ^ 32) - 1)并且表达式应该从: -1 + 1到((2 ^ 32) - 1)+ 1但是当我运行代码时,结果为0 为什么呢?

2 个答案:

答案 0 :(得分:6)

-1无符号表示最大可能号码无符号可以保留(UINT_MAX)。

由于unsigned的属性,为此包含了1,因此等于0。

答案 1 :(得分:1)

(无符号)-1是0xFFFFFFFF。 1 + 0xFFFFFFFF = 0x100000000溢出int,结果为0。