は、私が見たこと-0x80000000 + -0x80000000 = 0これは私には意味がありませんでしたので、私は、迅速なCプログラムは、以下のテストするために、実際の答えは0で書きました:なぜ-0x80000000 + -0x80000000 == 0ですか? programmignトリックについての本を読んでいる間
#include <stdio.h>
int main()
{
int x = -0x80000000;
int y = -0x80000000;
int z = x + y;
printf("Z is: %d", z);
return 0;
}
誰もがなぜ光を当てることができますか?私はオーバーフローについて何かを見ましたが、例外やその他のエラーではなく、オーバーフローが0を引き起こす仕組みはわかりません。私は何の警告も何も得られない。
はい、オーバーフローします。いいえ、Cは通常、整数のオーバーフローに対して警告または例外をスローしません。実際の答えの下位32ビットがすべて0であるため、0が表示されます。整数のオーバーフローが発生すると、モジュロ2^32のモジュロ4294967296を返す傾向があります。 –