2010-01-13 40 views

回答

10

C指定不同類型的標準轉換。規則有點複雜,但基本上「較小」的類型會臨時轉換爲較大的類型,所以如果您將int與一個char進行比較,則只會將該char轉換爲一個int值。

+3

的行話,這是「通常的算術轉換」,你可以在* C編程語言索引找到*由Kernighan和Ritchie。令人驚訝的是,有時一個帶符號的操作數被提升爲一個無符號類型,因爲另一個操作數是無符號的,所以一個大的正數'unsigned int'可能被認爲小於一個負數'int'。 – 2010-01-13 15:59:08

+1

另一個規則是算術(包括比較)在類型小於'int'的情況下是不會被執行的,所以如果你比較一個'char'和一個'char',它們都會被提升爲'int' 。 – caf 2010-01-14 04:03:31

1

根據C99標準,下面的操作數都是允許的任何關係運算符:

  • 兩個操作數與真正的算術類型
  • 兩個指針到同一類型的對象

在前一種情況,不同類型將根據usual arithmetic conversions進行轉換。

0

像賈森在其中一個評論中說的,你必須小心無符號類型。例如下面的代碼打印出破:

#include <stdio.h> 

int main() { 
    int a = -1; 
    unsigned int b = 1 << 31; 

    if (a < b) { 
    fprintf(stderr, "CORRECT\n"); 
    } else { 
    fprintf(stderr, "BROKEN\n"); 
    } 

    return 0; 
} 
相關問題