大学时候c语言教材中在介绍混合运算的类型转换中提到,在表达式的计算过程中,两个参加运算的操作数,在参与计算前自动进行类型转换,转换为同一类型,再运算求值;
其中算术运算中的类型自动转换遵循如下规则:
1:char型、short型转换为int型(包括unsigned char, unsigned short),float型转换为double型;
2:相同类型的操作数作算术运算,其结果为同一类型,即5/2 = 2而不是2.5;
3:不同类型的操作数经规则1转换后仍为不同类型,则其中级别低的类型自动转换为级别高的类型后再进行运算;级别高低如下:
char < short < int < unsigned int < long < unsigned long < float < double
其中,需要注意的是int型数据和unsigned int运算时,int会先转换为unsigned int,再参与运算。(c语言中整形常量默认为int型,比如-2,实型常量为double型,比如3.2)
重点:以上规则不仅适用于 + - * / %,而且适用于位运算符,列如 << >> | &等等
以下是测试代码:
运算结果如下: