【发布时间】:2019-12-23 18:20:06
【问题描述】:
转化排名在6.3.1.1/1中定义:
每个整数类型都有一个整数转换等级,定义如下:
——没有两个有符号整数类型具有相同的等级,即使它们 具有相同的表示。
——有符号整数类型的秩应大于 任何精度较低的有符号整数类型。
——
long long int的秩大于long int的秩,int的秩大于int的秩,为 大于short int的等级,该等级应大于signed char的排名。——任何无符号整数类型的等级应等于 对应的有符号整数类型,如果有的话。
——任何标准整数类型的秩都应大于秩 具有相同宽度的任何扩展整数类型。
——char的秩应该等于signed char和unsigned的秩 字符。
—
_Bool的排名应小于所有其他的排名 标准整数类型。——任何枚举类型的等级应等于 兼容的整数类型(见 6.7.2.2)。
——任何扩展有符号整数类型相对于另一个的等级 具有相同精度的扩展有符号整数类型是 实现定义,但仍受制于其他规则 确定整数转换等级。
- 对于所有整数类型
T1、T2和T3,如果T1具有更高的等级 比T2和T2的排名高于T3,然后T1的排名更高 排名高于T3。
有一个关于有符号整数类型的规则:
有符号整数类型的秩应大于 任何精度较低的有符号整数类型。
问题:精度更高的扩展无符号整数类型能否具有更小的整数转换等级?
考虑size_t 和unsigned int。第一个是扩展整数类型,如果size_t 的整数转换等级小于unsigned int,则整数提升 应用于size_t,这可能会导致精度损失。
【问题讨论】:
-
For any two integer types with the same signedness and different integer conversion rank, the range of values of the type with smaller integer conversion rank is a subrange of the values of the other type如果“更高精度”是指“更大范围的值”,那么我认为您所写的内容是不可能的。 “精度”这个词在这里很奇怪——任何整数类型都具有相同的精度 1(我希望)。 -
@KamilCuk 在这种情况下,不清楚有符号整数类型的等级应大于任何精度较低的有符号整数类型的等级中的精度意味着什么
-
"整数类型的精度是它用来表示值的位数,不包括任何符号位和填充位。整数类型的宽度相同,但包括任何符号位;因此对于无符号整数类型这两个值相同,而有符号整数类型的宽度比精度大一。"
标签: c integer language-lawyer conversion-rank