2012-05-18 95 views
5

什麼時候有一個有符號的整數不能代表整數提升方面原始類型的所有值?積分促銷

來自文本K & R,C Programming Language,2nd Ed。頁。 174

A.6.1積分促進

字符,短整數,或整數位字段中,所有符號或沒有,或枚舉類型的對象,可以在使用表達式可以使用任何整數。 如果一個int可以代表 原始類型的所有值,則將該值轉換爲 int;否則該值將轉換爲unsigned int。這個過程 被稱爲整體推廣。

這段代碼顯示的類型我的系統的限制:

#include <stdio.h> 
#include <limits.h> 

int main(void) 
{ 

    printf("CHAR_MAX: %i\n", CHAR_MAX);  
    printf("UCHAR_MAX: %i\n", UCHAR_MAX); 

    printf("SHORT_MAX: %i\n", SHRT_MAX);   
    printf("USHORT_MAX: %i\n", USHRT_MAX); 

    printf("INT_MAX: %i\n", INT_MAX);  
    printf("UINT_MAX: %u\n", UINT_MAX); 

    return 0; 
} 

結果是:

CHAR_MAX: 127 
UCHAR_MAX: 255 
SHORT_MAX: 32767 
USHORT_MAX: 65535 
INT_MAX: 2147483647 
UINT_MAX: 4294967295 

的符號int類型是比任何其他類型的方式做大,那麼它什麼時候會回落到UINT_MAX?

+0

剛剛打印的值在不同系統上可能會有所不同。它只是保證,一個短<= int和一個int <=長例如。因此,short和int可以具有相同的大小。 @ minitech的帖子是對的 – guitarflow

回答

5

這是可能的short int是尺寸爲int一樣,所以一個unsigned short int不能提升爲int,例如。編譯器不是這種情況。