本节书摘来自华章出版社《C语言程序设计与实践(第2版)》一书中的第3章,第3.5节,作者:凌云等著,更多章节内容可以访问云栖社区“华章计算机”公众号查看
3.5 各类数值型数据间的混合运算
在C语言中,允许不同类型的数据之间进行某些混合运算。前面提到,字符型数据可以和整型通用。不仅如此,C语言还允许整型、单精度型、双精度型、字符型的数据之间进行混合运算。例如,
是合法的。在进行运算时,不同类型的数据要先转换成同一类型,然后进行运算。转换的规则如图3-2所示。
图3-2中横向向左的箭头表示必定的转换,如字符型(char)参加运算时,不论另一个操作数是什么类型,必定先转换为整型(int);short型转换为int型,单精度(float)型数据在运算时一律先转换成双精度(double)型,以提高运算精度(即使是两个float型数据相加,也要先转换成double型,然后再相加)。
图3-2中纵向向上的箭头表示当运算对象为不同类型时的转换方向。例如int型与double型数据进行运算时,应先将int型的数据转换成double型,然后在两个同类型(double型)数据间进行运算,结果为double型。注意:箭头方向只表示数据类型级别的高低,由低向高转换,不要理解为int型先转换成unsigned型,再转换成long型,再转换成double型。也就是说,如果一个int型数据与一个double型数据进行运算,那么应直接将int型转换成double型。同样,如果一个int型数据与一个long型数据进行运算,那么应直接将int型转换成long型。
假设i 为int型,f为float型变量。运算表达式:,运算次序依次为:
1)进行10 + 'a'的运算,'a'自动转换成整型97,然后执行相加,结果为整型值107。
2)进行的运算,首先f自动转换成double型,然后把int型的i转换成double型,两个double型数据进行算术乘,结果是double型。
3)整型值107与的积相加。由于的值是double型,先将整型数107转换成double型,然后再相加,由此最终结果为double型。
习题
3.1 写出下面赋值表达式运算后a的值,设原来的a = 10, n = 5。
3.2 设x = 3, y = 1,下列语句执行后,m, x, y的值是多少?(各小题相互独立)
1)m = ++x - y++;
2)m = ++x - ++y;
3)m = ++x, x++;
4)m = x++, ++x;
5)m = (++x, x++);
6)m = (x++, ++x);
7)m = ++x / ++y;
8)m = x++ / y++;
9)m = x++ / ++y;
3.3 计算出下面各逻辑表达式的值,设 int a = 3, b = 4, c = 5, x;
3.4 请编写程序,将"China"译成密码。加密方法是:把原来字母用其字典顺序后面的第4个字母替换。例如,原来'a'用'e'替换,原来'A'用'E'替换。故"China"译成密码应为"Glmre"。试编写一个程序,用赋值的方法使变量c1、c2、c3、c4、c5的值分别为'C'、'h'、'i'、'n'、'a',经过运算,使c1、c2、c3 、c4、c5的值分别为'G'、'l'、'm'、'r'、'e',并在屏幕上显示。
3.5 若有定义:int a = 10, b = 9, c = 8;顺序执行下列两条语句后,变量c中的值是多少?
c = (a - = (b - 5));
c = (a % 11) + (b = 3);
3.6 设x和y均为int型变量,且x = 1, y = 2,则表达式1.0 + x / y的值为多少?
3.7 设y是int型变量,请写出判断y为偶数的关系表达式。
3.8 表示整型变量a的绝对值大于5的C语言表达式是什么?
3.9 表示整型变量a不能被5或7整除的C语言表达式是什么?
3.10 表示整型变量a不能同时被5和7整除的C语言表达式是什么?