【问题标题】:Does C99 allow UCHAR_MAX > UINT_MAXC99 是否允许 UCHAR_MAX > UINT_MAX
【发布时间】:2010-06-22 07:43:58
【问题描述】:

6.3.1.1 状态

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

long long int 的rank 大于long int 的rank 大于int 的rank 大于short int 的rank 大于signed char 的rank .


难道不是这样吗

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)

【问题讨论】:

    标签: c integer c99 limits


    【解决方案1】:

    刚刚找到我自己的答案。这是不允许的,根据 6.2.5 (8)

    对于任意两个具有相同符号和不同整数转换等级的整数类型 (见 6.3.1.1),整数转换等级较小的类型的取值范围是 其他类型值的子范围。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 您是否没有阅读开头段落,该段落在底部附近指出“它们的实现定义的值应等于或大于所示的值(绝对值)......”。
      猜你喜欢
      • 1970-01-01
      • 2012-10-27
      • 2015-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多