关于整数提升,有符号整数何时不能代表原始类型的所有值?
来自文本 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 呢?