隐式类型转换:如果一个操作数很短而另一个操作数是char,那么char会转换为short吗?
K&R指出,如果任一操作数是int
则另一个操作数将转换为int
。 当然,只有在遵循所有其他规则(如long double
, float
, unsigned int
等)之后。
通过该逻辑,如果另一个操作数是int
,则char
将转换为int
。 但是如果操作中的最高整数类型是short
呢?
现在,显然我不需要显式地将char
转换为更大的整数,但我确实想知道,ANSI-C是否处理了char
和short
之间的隐式转换? K&R没有透露任何相关信息。
说,我有以下几行代码:
char x = 'x'; short y = 42; short z = x + y;
将x
转换为short
吗? 或者根本没有转换开始?
只是说清楚:我不是在询问是否或如何从char
转换为short
。 我只是想知道隐式类型转换会发生什么。
“整数提升”会在添加之前将它们都转换为int
:
如果可以使用int或unsigned int,则可以在表达式中使用以下内容:
– 具有整数类型的对象或表达式,其整数转换等级小于int和unsigned int的等级。
[…]如果int可以表示原始类型的所有值,则该值将转换为int; 否则,它将转换为unsigned int。 这些被称为整数促销。
(ISO / IEC ISO / IEC 9899:1999(E),§6.3.1.1)
根据该标准, short
不能使用比char
更少的位数来定义。 因此, x
确实会转换为short
。