整数のオーバーフロー
790 ワード
#include
#include
int main()
{
printf("INT_MAX+1=%d
",INT_MAX+1);
printf("INT_MAX+INT_MAX=%d
",INT_MAX+INT_MAX);
printf("INT_MIN=%d
",INT_MIN);
printf("INT_MIN-1=%d
",INT_MIN-1);
printf("INT_MIN+INT_MIN=%d
",INT_MIN+INT_MIN);
return 0;
}
実行結果:
INT_MAX+1=-2147483648
INT_MAX+INT_MAX=-2
INT_MIN=-2147483648
INT_MIN-1=2147483647
INT_MIN+INT_MIN=0
任意のキーを押して続行してください.
結果を大まかに説明します.
私たちは4ビットのバイナリを例にして、4ビットのバイナリが表すことができる最大の正の整数は:7で、表すことができる数字
上の図では、3+1であれば、3から時計回りに1マス、7+1が時計回りに1マス、7+7が時計回りに7マス、7マスが-2になっていることを示しています.これが整数数オーバーフローです.オーバーフローとは、4ビットのバイナリのため、符号化で表す最大正の整数が7である.これで上の問題の答えが理解しにくくない.