![C++新经典](https://wfqqreader-1252317822.image.myqcloud.com/cover/184/44510184/b_44510184.jpg)
2.1.9 数值型数据之间的混合运算
所谓数值型数据之间的混合运算,就是不同类型数据在一起运算。看看如下范例:
![](https://epubservercos.yuewen.com/F329F6/23721607801994206/epubprivate/OEBPS/Images/Figure-p52_85235.jpg?sign=1738940607-i8V8Z2qnI7MBwu4LIDeHhgoOkZadiREV-0-8508bab9cc288d28e8f62ba4235e68e7)
这里看到了double类型和int类型相加,并且得到了正确的结果,实际上混合运算并不复杂,可以设想一下,因为double类型比int类型保存的数据大得多,所以,double+int=double类型,系统自动把int类型先转换成double类型,然后和原来的double类型相加,得到的结果依然是double类型。
可以得出一个结论:
不同类型数值变量进行混合运算时,系统会尝试将它们的变量类型统一,然后再做混合运算,并且系统会选取参与运算的变量中能表达最大数字的变量类型作为其他变量转换的目标类型。例如:
![](https://epubservercos.yuewen.com/F329F6/23721607801994206/epubprivate/OEBPS/Images/Figure-p52_85237.jpg?sign=1738940607-sooXyKk2UCIaWNRwoe15CA80v9avqYPA-0-27e9c6f0889d3a1e3fced5f118862388)
图2.21所示是不同类型变量做混合运算时的转换规则。
![](https://epubservercos.yuewen.com/F329F6/23721607801994206/epubprivate/OEBPS/Images/Figure-P52_44277.jpg?sign=1738940607-JmApOD7fsLcSHlVAWEqtVYEe1tyYJ47g-0-20d90bfef411d3f7d7ecdcd15e7c2273)
图2.21 不同类型变量做混合运算时的转换规则
针对图2.21,有几点说明:
(1)该图纵向向上的箭头表示当运算对象为不同类型时转换的方向。例如,如果一个int型要和一个long型做运算,则依据从低类型往高类型转换(图2.21中已经标出越在下面的类型越属于低类型),int类型要首先转成long类型,然后再和long类型做运算,结果当然也为long类型。同理,如果long类型要和double类型做运算,则long类型首先转成double类型,然后再和double类型做运算,结果当然也为double类型。
(2)该图横向向左的箭头表示必须转换,如char类型和short类型做运算,则char类型必须先转成int类型,short也必须先转成int类型,然后两者做运算,结果为int类型。同理,即便是两个float类型做运算,每个float类型也都必须先转成double类型,然后两者做运算,结果为double类型。该条内容取自于资料,笔者根据这些说法进行了测试,某些测试结果与描述并不一致,例如两个float类型做运算,结果仍旧为float类型。测试代码如下(仅供参考,为防止计算出错,笔者强烈建议混合运算时尽量保持类型一致并且保证运算结果不要溢出):
![](https://epubservercos.yuewen.com/F329F6/23721607801994206/epubprivate/OEBPS/Images/Figure-p52_85240.jpg?sign=1738940607-rG5xmZNmgesDvaiGAFt5ZpUsgNGCKxNv-0-fb11a7fd46776f0ba3b786c6b60e13a6)