6

关于整数提升,有符号整数何时不能代表原始类型的所有值?

来自文本 K&R,C 编程语言,第 2 版。页。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 呢?

4

1 回答 1

9

例如, a 可能与 ashort int大小相同int,因此unsigned short int无法将 a 提升为 a int。您的编译器并非如此。

于 2012-05-18T23:04:07.090 回答