1. 双目运算概念 双目运算由双目运算符和参与运算的运算量构成。所谓双目运算符是指该运算符的左右两侧都必须有运算量。
常见的双目运算符有:+、-、*、/、%等。诸如x+y、x/y、x*y等运算均为双目运算。
2. 双目运算的要点 遇到双目运算,主要注意数据类型问题。具体有以下几点:
(1) C语言要求:参与双目运算的两个运算量的类型必须一致;
(2) 双目运算的结果的类型必须与运算量的类型一致;
(3) 如果参与双目运算的两个运算量类型不一致,系统将自动把其中的一个进行类型转换,使两个运算量的类型一致后再进行运算。 自动转换的规则是:按“向高看齐”的原则进行转换。在几个基本的数据类型中,由高到低的排列顺序为:double,int,char。
比较:赋值运算中的类型转换 在赋值运算中,若遇到赋值号两侧的数据类型不一致,则也存在自动类型转换的问题,不过,它的转换规则与双目运算符的转换规则有所不同,它是按“向左看齐”的原则进行转换的,也即,是将赋值号右侧的量先转换为左侧的类型,然后再进行赋值。如有 int x; x=1.9; 则先将1.9转换为int型,变为1后再赋值给x。再如,double y; y=2; 则先将2转换为2.0,然后再赋值给y,结果y的值为2.0。 举例说明:
(1) 表达式 3+2 中,3和2类型一致(都是整型),符合双目运算的类型一致要求,所以直接运算,结果为5,也是整型。
(2) 表达式 3/2 中,3和2类型一致(都是整型),符合双目运算的类型一致要求,所以直接运算,但要注意,由于两个运算量都是整型,所以运算结果也必须是整型,3除以2的整数部分为1,所以3/2的结果是1,而不是2,更不是1.5,这是整数除法中特别要注意的地方。
又如19/5的整数部分是3,尽管其小数部分为0.8(超过了0.5),但19/5的结果仍然应该等于其整数部分的值3,而不能进行四舍五入变为4。
(3) 表达式 1.0+3 中,量个运算量的类型不一致,所以不能直接进行加法运算,必须先将整数3转换为double型常量3.0(注意,C中实数常量均为double型,而不是float型!),使表达式变为 1.0+3.0,然后才能进行加法运算,运算结果为4.0(不能写成整型4)。
又如,表达式 1.0+3/2 中,由于/运算符的优先级比+高,所以先运算3/2,刚才已经讲过,3/2的值应该为1,于是整个表达式变为 1.0+1(注意不要因为前面有一个1.0而把3/2的结果当作为1.5!),然后再将1作类型转换,变为1.0,最后再运算1.0+1.0,结果为2.0。 上述例子中的运算量均为常量,遇到变量时运算方法是一样的!3. 双目运算实例这是2000年4月二级C考试中的一道选择题:下列程序的输出结果是
A) 3 B) 3.2 C) 0 D) 3.07
main()
{ double d=3.2; int x,y;
x=1.2; y=(x+3.8)/5.0;
printf("%d \n", d*y);
} 本题中,程序先执行语句 x=1.2;,根据赋值运算的类型转换规则,先将double型的常量1.2转换为int型,即取整为1,然后将1赋值给变量x。接下来执行语句y=(x+3.8)/5.0;根据运算符的优先级,先计算小括号内,再计算除法,最后执行赋值运算。小括号内的运算过程:先将整型变量x的值1转换为double型1.0,然后与3.8进行加法运算,得到中间结果4.8。接着进行除法运算4.8/5.0,其结果小于1.0,这里没有必要计算出精确值,因为接着进行赋值运算,赋值号左边的变量y的类型为整型,于是对这个小于1.0的中间结果进行取整,结果为0,于是变量y的值为0。因此该题的输出结果应该是0。
温馨提示:答案为网友推荐,仅供参考