中級 › int型の最大値に1を足すと最小値(負の数)に折り返る › パターン1
int型の最大値に1を足すと最小値(負の数)に折り返る
INT_MAXに1を足すと、多くの環境ではINT_MINまで折り返り、突然大きな正の数が大きな負の数に変わります。
1 #include <limits.h> 2 #include <stdio.h> 3 4 int main(void) { 5 int x = INT_MAX; 6 long y = (____________)x + 1; ^ 7 printf("%ld\n", y); 8 return 0; 9 }
出力: -2147483648期待: 2147483648
空欄を埋めてコンパイル・実行を通す
(int)x + 1はint型のまま加算されるため、INT_MAXを超えた瞬間に折り返り負の数になります。longにキャストしてから足せば、加算そのものがlong型で行われるため折り返りません。
次の問題