Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
このコードを見てください:
void main () { int i = -1; unsigned u = 1; cout << u + i; }
u(符号なし)とi(符号付き)の加算。したがって、iは符号なし型に変換する必要があるため、解釈する必要があり((2 ^ 32)-1)、式は-1+1から((2 ^ 32)-1)+ 1ですが、コードを実行すると0になります。なぜですか?
-1unsignedが保持できる最大数のunsigned表現では( UINT_MAX)。
-1
UINT_MAX
これに1を追加すると、のプロパティのunsignedために折り返され、0になります。
unsigned
(符号なし)-1は0xFFFFFFFFです。1 + 0xFFFFFFFF = 0x100000000これはintをオーバーフローし、結果は0になります。