C99是否允许UCHAR_MAX> UINT_MAX

时间:2010-06-22 07:43:58

标签: c integer c99 limits

6.3.1.1国家

有符号整数类型的等级应大于精度较低的任何有符号整数类型的等级。

long long int的等级应大于long int的等级,其应大于int的等级,其应大于short int的等级,short int应大于signed char的等级。


那么,情况可能不是这样吗

signed   char has 32 bits (1 padding, 1 sign, 30 precision)
unsigned char has 32 bits (0 padding, 0 sign, 32 precision)
signed   int  has 32 bits (1 padding, 1 sign, 30 precision)
unsigned int  has 32 bits (2 padding, 0 sign, 30 precision)

2 个答案:

答案 0 :(得分:4)

刚刚找到了我自己的答案。根据6.2.5(8)

,这是不允许的

对于具有相同签名和不同整数转换等级的任何两个整数类型 (见6.3.1.1),具有较小整数转换等级的类型的值范围是a 另一种类型的值的子范围。

答案 1 :(得分:0)

您对char变量的假设是错误的。在limits.h中,CHAR_BIT为8.你有32。

在标准'5.2.4.2.1整数类型的大小'中,将CHAR_BIT定义为8。