【发布时间】:2019-12-21 17:02:16
【问题描述】:
按照标准C11 p6.3.1.1
如果一个 int 可以表示原始类型的所有值(受限制 通过宽度,对于一个位域),该值被转换为一个 int; 否则,它将转换为无符号整数。这些被称为 整数促销.58) 所有其他类型都不会被整数改变 促销活动。
我很好奇在什么情况下一个值会被提升为unsigned int? short int 这样的类型绝对适合带符号的 int,即使我在结构中定义了 31 位作为位字段,它仍然适合带符号的 int。
【问题讨论】:
-
没有将整数默认转换为 unsigned int,如果您将类型定义为 int,它将保持为 int。
-
@pmg 我不认为你的例子有提升,你的例子被定义为标准 6.4.4.1 整数常量中的常量类型
-
unsigned short如果不适合int。 -
@WeatherVane
unsigned short什么时候不适合int?unsigned short int比signed int短得多,即使后者有一个有符号位。 -
当它是 32 位时。
unsigned short的最少为 16 位。
标签: c