4.7 混合运算
不同类型之间可以进行混合运算。C语言中的混合运算情况较多,死记硬背必然达不到预期的效果。如果理解了如下几个概念,那么C语言的混合运算问题将迎刃而解。
4.7.1 存储形式
在C语言中,整型和字符型(以ASCII码表示)都是以二进制补码存放的,正数的补码为其本身,负数的补码为其绝对值按位取反+1;如1,以00000001存放,-1,(绝对值为1,1的反码为11111110,反码+1,为11111111),故-1存放形式为11111111。
4.7.2 范围
范围取决于存储数据的字节数,int(4字节),char(1字节)等,根据自己的编译环境用sizeof()函数可以查看数据大小。
【例4-19】编写程序,查看各数据类型的大小。(源代码\ch04\4-19)
运行上述程序,结果如图4-34所示。
图4-34 查看数据大小
【代码解析】
本例用于演示使用sizeof()函数如何查看数据的大小。在代码中首先定义一个无返回值的函数fun(),然后在函数里定义字符型变量a、短整型变量b、整型变量c和实型变量d,通过sizeof()函数来查看变量数据的大小。最后主函数调用fun()函数并输出结果。
4.4.3 混合运算原则
数据类型混合运算应遵循精确度由低到高的原则,如图4-35所示。
图4-35 不同类型的转化规律
在做运算的时候,自左向右的方向是由编译系统自己完成而且一定完成的转换,也就是char和int做运算结果一定是int类型的。而自下而上的转换看表达式,如果int和long做运算,则int转成long,最后结果是long类型;如果int和float运算,先由float到double,再由int到double。最后结果是double。
【例4-20】编写程序,分别定义char型、short型、int型、float型和double型的变量,进行混合运算。(源代码\ch04\4-20)
运行上述程序,结果如图4-36所示。
图4-36 混合运算
【代码解析】
本例用于演示数据类型间的混合运算。在代码中首先定义变量并赋值,分别为char型a,初始化为‘C’,shout型的s,初始化为6,int型的b,初始化为2,float型的c,初始化为5.6,还有double型的result,用来存放各种类型变量相加后的值。通过printf()函数,发现最后的结果是一个实型数据。