购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

5.11 各类型数据之间的混合运算

所谓“各类型数据之间的混合运算”就是指,当参加一个运算的数据的类型不同时运算的法则是什么。首先变量的数据类型是可以转换的。转换的方法有两种,一种是自动转换,另一种是强制转换。自动转换即当不同类型的数据进行混合运算时,编译系统将按照一定的规则自动完成。而强制类型转换是由程序员通过编程强制转换数据的类型。强制类型转换在后面讲“循环”的时候再详细介绍。

自动转换的规则如下:

1)当参与运算的数据的类型不同时,编译系统会自动先将它们转换成同一类型,然后再进行运算。但问题是转换的时候是谁转换成谁呢?转换的基本规则是“按数据长度增加的方向进行转换”,以保证精度不降低。比如int型数据和long型数据进行相加或相减运算时,系统会先将int型数据转换成long型,然后再进行运算。这样的话运算结果的精度就不会降低。long是“大水桶”,int是“小水桶”。int能存放的,long肯定能存放;而long能存放的,int不一定能存放。

2)所有的浮点运算都是以双精度进行的。在运算时,程序中所有的float型数据全部都会先转换成double型。即使只有一个float型数据,也会先转换成double型,然后再进行运算。为什么要这样呢?因为CPU在运算的时候有“字节对齐”的要求,这样运算的速度是最快的。这个现在先不管,如果以后有机会学习汇编的话你就知道原因了。

3)char型和short型数据参与运算时,必须先转换成int型。这也是涉及CPU的运行原理的,记住就行了。

4)有符号整型和无符号整型混合运算时,有符号型要转换成无符号型,运算的结果是无符号的。这条规则经常使人纠结,可以写一个程序看一下。这个程序读者现在还无法写出,但是很简单,应该可以看得懂。


# include <stdio.h>
int main(void)
{
    int a = -10;
    unsigned b = 5;
    if ((a+b) > 0)
    {
        printf("Hello\n");
    }
    return 0;
}
/*VC++6.0中的输出结果是:
--------------------------------------
Hello
--------------------------------------
*/

程序的意思是分别定义一个有符号整型a和无符号整型b。然后分别将–10和5赋给a和b,如果a+b的值大于0就输出Hello。理论上讲–10+5的值为–5,所以不可能输出Hello。但是我们从输出的结果可以看出,Hello被输出了。这说明a+b的值是正数,即是无符号的。这就是这个规则。

5)整型和浮点型混合运算时,整型先转换成浮点型,运算的结果是浮点型。

6)在赋值运算中,当赋值号两边的数据类型不同时,右边的类型会转换为左边的类型,然后再赋给左边。如果右边数据类型的长度比左边长,那么将会丢失数据,这样就会降低精度,所以编译的时候会产生警告。

本小节的内容大家了解一下就行了。因为在实际编程中,至少就初学而言,不同类型数据之间的混合运算是很少见的。最多也就是整型和浮点型的混合运算。但是试卷上的题目除外! ma9Q9pj3v1skyCB6K+wFGK3HSzoYzV3f4Ke0sQwOr6+ybPBkD7oenSYMtdlwjWPM

点击中间区域
呼出菜单
上一章
目录
下一章
×