隐式类型转换:如果一个操作数很短而另一个操作数是char,那么char会转换为short吗?

K&R指出,如果任一操作数是int则另一个操作数将转换为int 。 当然,只有在遵循所有其他规则(如long doublefloatunsigned int等)之后。

通过该逻辑,如果另一个操作数是int ,则char将转换为int 。 但是如果操作中的最高整数类型是short呢?

现在,显然我不需要显式地将char转换为更大的整数,但我确实想知道,ANSI-C是否处理了charshort之间的隐式转换? 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