C言語の基礎
unsigned char a = 200, b = 100;
int s = a + b;
unsigned char c = a + b;
printf("%d %d\n", s, c);unsigned char は8ビット、int は32ビットとする。上のコードを実行したときの出力として、正しいものはどれか。
- A44 44
- B300 44
- C300 300
答えと解説を見る
正解:B. 300 44
C言語では、int より小さい型(char や short など)の値は、計算の前に int に変換されます(整数拡張)。そのため a + b は8ビットではなく int で計算されて300になり、int の s にはそのまま300が入ります。8ビットの c に代入するときは、256で割った余りの44に変換されます。8ビットのマイコンでも、規格のうえでは式の途中の計算は int の幅で行われます。
- A. 加算は int で行われるので、s には300が入ります。8ビットのまま計算されると考えた場合の値です。
- B. 正しい。s は int で計算した300、c は300を256で割った余りの44です。
- C. unsigned char の c には256以上の値は入らず、300は44に変換されます。