整体推广

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

来自文本K&R,C Programming Language,2nd Ed。 页。 174

A.6.1整体推广

无论是否有符号,都可以使用字符,短整数或整数位字段,或者枚举类型的对象,可以在任何可以使用整数的表达式中使用。 如果int可以表示原始类型的所有值,则该值将转换为int; 否则该值将转换为unsigned int 。 此过程称为整体促销。

此代码显示了我的系统类型的限制:

#include  #include  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?

short int可能与short int的大小相同,因此unsigned short int无法提升为int 。 这不是你的编译器的情况。