C言語の基礎
int a = -1;
unsigned int b = 1;
if (a < b)
printf("a < b\n");
else
printf("a >= b\n");int と unsigned int は32ビットとする。上のコードを実行したときの結果として、正しいものはどれか。
- Aa < b と表示される
- Ba >= b と表示される
- C符号付きと符号なしの値は比べられないので、コンパイルエラーになる
答えと解説を見る
正解:B. a >= b と表示される
int と unsigned int を比べるときは、両方が unsigned int にそろえられてから比べられます(通常の算術変換)。−1 は unsigned int では 2³² − 1 = 4294967295 になるので1より大きく、a < b は偽になります。そのため「a >= b」と表示されます。符号付きと符号なしを混ぜた比較には、gcc では -Wextra(または -Wsign-compare)を付けると警告が出ます。
- A. a は unsigned int に変換されて4294967295になるので、1より小さくはなりません。
- B. 正しい。−1 が4294967295に変換されてから比べられます。
- C. 比較はでき、両方を unsigned int にそろえてから比べます。