什么时候有符号整数不能代表整数提升的原始类型的所有值?
来自文本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?
答案 0 :(得分:5)
short int
可能与int
的尺寸相同,因此unsigned short int
无法升级为int
。这只是你的编译器的情况。