C 标准中整数秩转换的描述不准确?

问题描述 投票:0回答:1

C 标准说(6.3.1.1 布尔值、字符和整数):

1 每个整数类型都有一个整数转换等级,定义如下:

  • 任何两个有符号整数类型都不应具有相同的等级,即使它们具有相同的等级 代表。
  • 有符号整数类型的等级应大于任何有符号整数的等级 打字精度较低。
  • long long int 的rank 应大于long int 的rank,即 应大于 int 的等级,而 int 的等级应大于 Short 的等级 int,应大于有符号字符的排名。
  • 任何无符号整数类型的等级应等于相应的等级 有符号整数类型(如果有)。
  • 任何标准整数类型的等级应大于任何扩展的等级 具有相同宽度的整数类型。
  • char 的等级应等于signed char 和unsigned char 的等级。
  • _Bool 的等级应小于所有其他标准整数类型的等级。
  • 任何枚举类型的等级应等于兼容整数类型的等级 (见 6.7.2.2)。
  • 任何扩展有符号整数类型相对于另一个扩展有符号整数类型的排名 具有相同精度的整数类型是实现定义的,但仍受 确定整数转换等级的其他规则。
  • 对于所有整数类型 T1、T2 和 T3,如果 T1 的秩大于 T2 并且 T2 有 等级高于 T3,则 T1 的等级高于 T3。

这意味着在整数类型系统中不能存在具有相同秩的两种类型(有符号或无符号)。然而,更进一步:

在表达式中,无论 int 或 unsigned int 可能出现的地方,都可以使用以下内容: 使用:

  • 具有整数类型(除 int 或 unsigned int 之外)的对象或表达式 其整数转换等级小于或等于 int 的等级并且 无符号整数。

怎么可能一些低等类型也会有相同的等级?

c language-lawyer conversion-rank
1个回答
0
投票

根据平台的不同,

enum
类型的对象可以是“具有整数类型(
int
或无符号
int
除外)的对象或表达式,其整数转换等级等于
int
的等级”和
unsigned int
。”

© www.soinside.com 2019 - 2024. All rights reserved.