2.6.3 表达式的运算顺序
表达式的计算是与运算符的含义(语义)以及它们的优先级和结合性的规则有关,例如有单目运算符和双目运算符的区别,对增量运算符又有前缀和后缀形式等。
为了保证所需的计算顺序,应注意几点:
1)掌握C语言中对各个运算符的优先级和结合性的规定。特别要注意某个运算符可能代表不同的语义(如*等)。
2)C语言中有3个运算符保证计算顺序自左至右进行,它们是:逻辑与&&、逻辑或||和逗号运算符。例如,在表达式
++i||++j && ++k
中,按优先级关系,先执行++i,仅当执行后i的值为非0时才会执行&&右边的运算,否则就不需要执行++j的运算,因为逻辑与的结果必然为0。
3)在一个表达式中出现多个有不同优先级的运算符时,可以通过加圆括号的方式改变运算顺序,例如:
(i+j)/(c*d)
4)为了强调某部分是作为一个“整体”参与运算,可以引用“中间变量”,将“整体”的值赋予这个变量,然后由这个变量参与有关运算。例如:
y= a+b
x = y*k;
例2-6 分析下面程序运行的结果。
程序运行分析:
第一个赋值语句:赋值号右边表达式是条件表达式。按条件运算符?:规定的顺序,先计算?之前的表达式。首先计算最内层括号部分(19+60),得到值79;然后按运算优先级的高低依次执行下面的运算:79%4等于3,19%5等于4,60%5等于0,4+0等于4,3>=4不成立,故将0赋予x。
第二个复合赋值语句:x+30等于30。由于+=和=有相同的优先级,其结合性自右至左,所以,先将30赋予z,然后将z的值与y的值相加,再赋予y,最后y的值为45。
最后一个逻辑表达式语句:由于运算符&&的优先级高于运算符||,所以计算顺序自左至右,因而先做--x,其结果是:x值变为0;表达式--x&&++y的结果就已确定(为0),++y不再执行,y的值仍然为1;但对于运算符||来说,左分量为0,尚不能确定整个逻辑表达式的值,故执行其右边的表达式z++,最后z值变为2。
程序运行结果为
x=0
y=45,z=30
x=0,y=1,z=2
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。