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

-1unsignedが保持できる最大数の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 に答える