4

K&R 声明,如果其中一个操作数是一个int,另一个操作数将被转换为int. 当然,这只是在遵循所有其他规则(如long doublefloatunsigned int)之后。

按照这种逻辑,如果另一个操作数是 ,char则将转换为。但是如果操作中的最高整数类型是 a呢?intintshort

现在,显然我不需要将 a 显式转换char为更大的整数,但我想知道,ANSI-C 是否处理引擎盖之间charshort引擎盖下的隐式转换?K&R 对此只字未提。

说,我有以下几行代码:

char x = 'x';
short y = 42;
short z = x + y;

x转换成short? 或者根本就没有转变?

只是为了说清楚:我不是在问是否或如何从转换charshort. 我只想知道隐式类型转换会发生什么。

4

2 回答 2

5

“整数提升”会将它们都转换为int加法之前:

可以在可以使用 int 或 unsigned int 的表达式中使用以下内容:

— 具有整数类型的对象或表达式,其整数转换等级小于 int 和 unsigned int 的等级。

[...] 如果 int 可以表示原始类型的所有值,则该值将转换为 int;否则,它将转换为无符号整数。这些被称为整数促销。

(ISO/IEC ISO/IEC 9899:1999 (E), §6.3.1.1)

于 2011-09-16T08:50:06.110 回答
-2

根据标准,short永远不能使用比 更少的位数来定义char。因此,x确实会转换为short.

于 2011-09-16T08:41:43.980 回答