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

Mir*_*vic 4 c short type-conversion char

K&R声明,如果任一操作数是int另一个操作数将被转换为int.当然,所有其他的规则(比如仅在这之后long double,float,unsigned int等)进行了跟踪.

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

现在,很明显我并不需要显式地转换char到更大的整数,但我不怀疑,不ANSI-C处理之间的隐式转换charshort引擎盖下?K&R没有透露任何相关信息.

说,我有以下几行代码:

char x = 'x';
short y = 42;
short z = x + y;
Run Code Online (Sandbox Code Playgroud)

x转换成short?或者根本没有转换开始?

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

und*_*gor 5

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

如果可以使用int或unsigned int,则可以在表达式中使用以下内容:

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

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

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

  • 请注意,这也意味着在某些系统上,如果`char`是无符号的(允许但很少见),并且与unsigned int具有相同的范围(允许但很少见),则促销可能会导致`unsigned int`. (2认同)