中級 › int型の最大値に1を足すと最小値(負の数)に折り返る › パターン2
int型の最大値に1を足すと最小値(負の数)に折り返る
INT_MAXに1を足すと、多くの環境ではINT_MINまで折り返り、突然大きな正の数が大きな負の数に変わります。
1 #include <limits.h> 2 #include <stdio.h> 3 4 int main(void) { 5 int count = INT_MAX - 1; 6 long total = (____________)count + 3; ^ 7 printf("%ld\n", total); 8 return 0; 9 }
出力: -2147483647期待: 2147483649
空欄を埋めてコンパイル・実行を通す
countがINT_MAXに近い値の場合、3を足しただけでも簡単にオーバーフローします。加算前にlongへ広げておくことが対策になります。
次の問題