C言語の基礎
uint8_t x = 250;
for (int i = 0; i < 10; i++)
x++;
printf("%d\n", x);uint8_t は8ビットの符号なし整数型である。x を10回増やす上のコードを実行したときの出力として、正しいものはどれか。
- A4
- B255
- C260
答えと解説を見る
正解:A. 4
uint8_t で表せるのは0〜255です。符号なしの整数型に入らない値は、2⁸ = 256 で割った余りの値になると規格で決まっているので、250から1ずつ増やすと、255の次は0に戻ります。10回増やすと、250 + 10 = 260 を256で割った余りの4になります。これに対して、符号付きの整数型の計算のあふれは未定義動作です。
- A. 正しい。260を256で割った余りの4になります。
- B. 最大値の255で止まる(飽和する)と考えた場合の値です。符号なしの整数型は0の側に戻ります。
- C. あふれを考えずに250に10を足した値です。uint8_t には256以上の値は入りません。