整形類規(guī):
否則,兩個操作數(shù)都不是三種浮點類型之一,它們一定是某種整值類型。在確定共同的目標提升類型之前,編譯器將在所有小于int的整值類型上施加一個被稱為整值提升(integral promotion)的過程。在進行整值提升時,類型(char、signed char、unsigned char和short、int)都被提升為類型int。如果機器上的int型足夠表示所有unsigned、shoft型的值(這通常發(fā)生在short用半個字表示,而int用一個字表示的情況下),則unsigned short int也被轉(zhuǎn)換成int,否則它會被提升為unsigned int。
wchar_t和枚舉類型被提升為能夠表示其底層類型(underlying type)所有值的最小整數(shù)類型。
一旦整值提升執(zhí)行完畢,類型比較就又一次開始。如果一個操作數(shù)是unsigned long型,則第二個也被轉(zhuǎn)換成unsigned long型。如果兩個操作數(shù)的類型都不是unsigned long,而其中一個操作數(shù)是long型,則另一個也被轉(zhuǎn)換成long型。long 類型的一般轉(zhuǎn)換有一個例外,如果一個操作數(shù)是long型,而另一個是unsigned int型,那么只有機器上的long型足夠長,以便能夠存放unsigned int的所有值時(一般來說,在32位操作系統(tǒng)中,long型和int 型都用一個字長來表示,所以不滿足這里的假設(shè)條件),unsigned int才會被轉(zhuǎn)換為long型,否則兩個操作數(shù)都被提升為unsigned long型。若兩個操作數(shù)都不是long型,而其中一個是unsigned int型,則另一個也被轉(zhuǎn)換成unsigned int 型。否則兩個操作數(shù)一定都是int 型。
int d = -1;
if (d <= sizeof(arr)/sizeof(arr[0]))
...
這樣的比較語句有問題,sizeof運算符返回無符號數(shù)。
否則,兩個操作數(shù)都不是三種浮點類型之一,它們一定是某種整值類型。在確定共同的目標提升類型之前,編譯器將在所有小于int的整值類型上施加一個被稱為整值提升(integral promotion)的過程。在進行整值提升時,類型(char、signed char、unsigned char和short、int)都被提升為類型int。如果機器上的int型足夠表示所有unsigned、shoft型的值(這通常發(fā)生在short用半個字表示,而int用一個字表示的情況下),則unsigned short int也被轉(zhuǎn)換成int,否則它會被提升為unsigned int。
wchar_t和枚舉類型被提升為能夠表示其底層類型(underlying type)所有值的最小整數(shù)類型。
一旦整值提升執(zhí)行完畢,類型比較就又一次開始。如果一個操作數(shù)是unsigned long型,則第二個也被轉(zhuǎn)換成unsigned long型。如果兩個操作數(shù)的類型都不是unsigned long,而其中一個操作數(shù)是long型,則另一個也被轉(zhuǎn)換成long型。long 類型的一般轉(zhuǎn)換有一個例外,如果一個操作數(shù)是long型,而另一個是unsigned int型,那么只有機器上的long型足夠長,以便能夠存放unsigned int的所有值時(一般來說,在32位操作系統(tǒng)中,long型和int 型都用一個字長來表示,所以不滿足這里的假設(shè)條件),unsigned int才會被轉(zhuǎn)換為long型,否則兩個操作數(shù)都被提升為unsigned long型。若兩個操作數(shù)都不是long型,而其中一個是unsigned int型,則另一個也被轉(zhuǎn)換成unsigned int 型。否則兩個操作數(shù)一定都是int 型。
int d = -1;
if (d <= sizeof(arr)/sizeof(arr[0]))
...
這樣的比較語句有問題,sizeof運算符返回無符號數(shù)。