二級(jí)C基礎(chǔ):C整型升級(jí)和尋常算術(shù)轉(zhuǎn)換實(shí)例(2)

字號(hào):

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