算术类型之间的隐式转换被设计得尽可能避免损失精度。
何时发生隐式类型转换:
在下面这些情况下,编译器会自动地转换运算对象类型:
- 在大多数表达式中,比int小的整型值首先提升为较大的整数类型
- 在条件中,非布尔值转换成布尔类型
- 初始化过程中,初始值转换成变量的类型;在赋值语句中,右侧运算对象转换成左侧运算对象的类型
- 如果算术运算或关系运算的运算对象有多种类型,需要转换成同一种类型
- 函数调用时也会发生类型转换
算术转换(arithmetic conversion)规则:运算符的运算对象将转换成最宽的类型。
整型提升:把小整数类型转换成较大的整数类型。其中布尔值false提升为0,true提升为1。
无符号类型的运算对象:如果一个运算对象类型是无符号类型,另一个是带符号类型,而且其中的无符号类型不小于带符号类型,那么带符号的运算对象转换成无符号的;如果无符号类型小于带符号类型,此时转换结果依赖于机器。