K& R指出,如果任一操作数是int
,则另一个操作数将转换为int
。当然,这只是在所有其他规则(例如long double
,float
,unsigned int
等)被遵循之后。
根据该逻辑,如果另一个操作数是char
,则int
将转换为int
。但是,如果操作中的最高整数类型是short
?
现在,显然我不需要显式地将char
转换为更大的整数,但我确实想知道,ANSI-C是否处理char
和short
之间的隐式转换引擎盖? K& R对此没有任何说明。
说,我有以下几行代码:
char x = 'x';
short y = 42;
short z = x + y;
x
会转换为short
吗?或者根本没有转换开始?
只是说清楚:我不是在询问是否或如何从char
转换为short
。我只是想知道隐式类型转换会发生什么。
答案 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
。