3

看看这段代码:

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

cout << u + i;
}

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

4

2 回答 2

6

-1在unsigned 可以容纳的最大可能UINT_MAX数的无符号表示中 ( )。

由于 的属性,将 1 添加到此环绕unsigned,因此等于 0。

于 2012-05-18T21:56:18.247 回答
1

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

于 2012-05-18T21:58:01.973 回答