中級 › 符号ありと符号なしの比較で -1 が巨大な数として扱われる › パターン1
符号ありと符号なしの比較で -1 が巨大な数として扱われる
int型とunsigned int型を比較すると、int型の値は自動的にunsigned intへ変換されます。
1 #include <stdio.h> 2 3 int main(void) { 4 int a = -1; 5 unsigned int b = 1; 6 if (___________________) { ^ 7 printf("a is less\n"); 8 } else { 9 printf("a is not less\n"); 10 } 11 return 0; 12 }
出力: a is not less期待: a is less
空欄を埋めてコンパイル・実行を通す
aとbを比較すると、int型のaは自動的にunsigned intへ変換されます。-1は非常に大きな正の数になるため、bより大きいと判定されてしまいます。bをintにキャストすれば直感通りの比較になります。
次の問題