整体推广

时间:2012-05-18 23:00:40

标签: c integer-promotion

什么时候有符号整数不能代表整数提升的原始类型的所有值?

来自文本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

signed int类型比任何其他类型都大,所以什么时候才能回到UINT_MAX?

1 个答案:

答案 0 :(得分:5)

short int可能与int的尺寸相同,因此unsigned short int无法升级为int。这只是你的编译器的情况。