隐式类型转换:如果一个操作数是短的&另一个是char,会将char转换为short吗?

时间:2011-09-16 08:35:35

标签: c char type-conversion short

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

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

,该怎么办?

现在,显然我不需要显式地将char转换为更大的整数,但我确实想知道,ANSI-C是否处理charshort之间的隐式转换引擎盖? K& R对此没有任何说明。

说,我有以下几行代码:

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

x会转换为short吗?或者根本没有转换开始?

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

2 个答案:

答案 0 :(得分:5)

“整数提升”会在添加之前将它们转换为int

  

在int或unsigned int可以的任何地方都可以使用以下代码   使用:

     

- 具有整数转换等级较小的整数类型的对象或表达式   比int和unsigned int的等级。

     

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

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

答案 1 :(得分:-2)

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