C語言基礎
int a = -1;
unsigned int b = 1;
if (a < b)
printf("a < b\n");
else
printf("a >= b\n");int 與 unsigned int 為32位元。執行上方程式碼時的結果,下列何者正確?
- A顯示 a < b
- B顯示 a >= 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 再比較。