c - 关于整数提升
问题描述
根据 C17 6.3.1.1
如果 int 可以表示原始类型的所有值(受宽度限制,对于位域),则该值将转换为 int;否则,它将转换为无符号整数。
“所有值”是否意味着同一范围内的整个标识符?那么当某些标识符在同一标识符范围内带有不能用int(如long long int)表示的变量时,标识符没有任何提升?
解决方案
“所有值”是否意味着同一范围内的整个标识符?
我不确定为什么您认为范围内的所有标识符都很重要。整数提升适用于单个项目,无论是对象(例如,变量)还是表达式。
它的意思是,如果该项目的每个可能值(已经保证适合您的报价(a)int
之前的段落或段落的类型之一)可以由类型表示,则它被提升为. 否则它将被提升为.unsigned int
int
int
unsigned int
(a)案文全文指出:
以下可以用在表达式中,只要可以使用
int
orunsigned int
:
具有整数类型(除
int
or之外unsigned int
)的对象或表达式,其整数转换等级小于或等于int
and 的等级unsigned int
。
_Bool
,int
,signed int
或类型的位域unsigned int
。如果 an
int
可以表示原始类型的所有值(受宽度限制,对于位域),则该值将转换为int
; 否则,将其转换为unsigned int
. 这些被称为整数促销。整数提升不会改变所有其他类型。
推荐阅读
- mysql - 比较以 % 为单位的行值以衡量增长
- plugins - 问:如何使用插件:在具有多个内联 ckeditor 的页面上查找
- r - 给定 R 中的百分位等级,生成指数分布
- javascript - 如何使用 PHP foreach 生成用作插件变量的 javascript 对象数组?
- c# - 为什么我不能使用 iTextSharp 使用此代码将 PDF 附加到另一个 PDF?
- c++ - 以编程方式获取 Samba 共享卷 ID
- python - 如何按元素排序 python 列表?
- ml.net - ML.NET - ForecastBySsa
- ios - 为什么我的 Firebase 存储照片没有加载到 UICollectionView 中?
- linux - 如何根据厨师食谱中的命令执行返回的值禁用 linux 进程