两个类型不一致的操作数进行算数运算时吧,编译器会按照下面的顺序查阅变换(优先级从上到下)
- 如果有一个操作数的类型是long double,则将另一个操作数转换为long double
- 否则,如果有一个操作数类型是double,则将另一个操作数转换为double
- 否则,如果有一个操作数类型时候float,则将另一个操作数转换为float
- 否则,到这里说明两个操作数都是整型,因此执行整形提升
- 在这种情况下,如果两个操作数都是有符号或无符号的,且其中一个操作数的级别比另一个低,则转换为级别高的类型
- 如果一个操作数为有符号的,另一个操作数为无符号的,且无符号操作数的级别比有符号操作数高,则将有符号操作数转换为无符号操作数所属的类型
- 否则,如果有符号类型可表示为无符号类型的所有可能取值,则将无符号操作数类型转换为有符号操作数所属的类型
- 否则,将两个操作数都转换为有符号类型的无符号版本。