中級 › 符号ありと符号なしの比較で -1 が巨大な数として扱われる › パターン3
符号ありと符号なしの比較で -1 が巨大な数として扱われる
int型とunsigned int型を比較すると、int型の値は自動的にunsigned intへ変換されます。
1 #include <stdio.h> 2 3 int main(void) { 4 int balance = -10; 5 unsigned int fee = 5; 6 if (___________________________) { ^ 7 printf("overdrawn\n"); 8 } else { 9 printf("ok\n"); 10 } 11 return 0; 12 }
出力: ok期待: overdrawn
空欄を埋めてコンパイル・実行を通す
残高がマイナスで手数料より明らかに少ないのに、符号なしへの変換によって「残高は十分」と誤判定されます。金額計算でunsignedを不用意に使うと危険な理由の一つです。
次の問題