关于c语言逻辑表达式的问题,求高手啊

ix=iy=iz=1;
im=++ix&&++iy||++iz;
求ix iy iz im的值。。。

求详细过程 ,为什么++iz没有被运算,不是||的优先级大于=吗? ++ix和++iy都为2 与运算后im为什么等于1.

c语言中,为了加快编译速度,有一条这样的规定,当一个逻辑表达式的值能够确定下来的时候,它不会执行下面的语句。
例如:a && b这个表达式,如果a为假,则 a&&b一定为假,不管b为真,还是假,也就是a等于假时,这个表达式的值已经确定了。所以b不会执行了。但,如果a为真,则 a&&b的值就确定不了,因为b若为假,则表达式为假,b为真,表达式为真,所以还需要判断b的真假,所以b会执行。

++ix 结果为2,为真。
++iy 结果为2,为真
所以++ix&&++iy 为真, 因为 ||有一个为真,就为真,所以 ++iz不会执行,因为已经得出前面为真了。追问

im=++ix&&++iy||++iz 这个式子里 ++ix&&++iy是判断真假得的1 ,那im=1||++iz 里的1是赋值还是判断? 怎么确定啊 谢谢

追答

||的优先级高于=,当然是判断了。
1 || ++iz 为真,
im才等于1的。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-09-12
这个问题与编译系统的优化有关。
一、逻辑运算符&&与||的优先级高于赋值运算符=;
二、逻辑与&&优先级大于逻辑或||;
三、对于逻辑表达式,如果前面部分表达式的结果已经决定了整体表达式的值,则为了提高编译速度,后面的表达式不再运算,如:v1=a&&b;如果a=0,则v1=0,最终结果与b无关,所以此时不再运算b;v2=c||d,如果c=1,则v2=1,最终结果与d无关,不再运算d。
四、在你的例子中,先运算逻辑与“++ix&&++iy”,因为++ix后,ix=2,逻辑表达式的值是0还是1,由“++iy”决定,此时必须运算“++iy”,则iy=2,;逻辑与的结果为1.
五、表达式变为:im = 1 || ++iz;对于逻辑或运算,左边表达式的值已经为1,则无论++iz的值为多少,均有im=1,所以,此时“++iz”就不再运算了(运算也没有意义了),所以iz等于初始值1。追问

im=++ix&&++iy||++iz 这个式子里 ++ix&&++iy是判断真假得的1 ,那im=1||++iz 里的1是赋值还是判断? 怎么确定啊 谢谢

第2个回答  2011-09-12
im==1;
ix==2;
iy==2;
iz==1;

因为表达式&&已经成立,所以||后程序不会再继续运行,因为没有必要在判断了,这是机制
第3个回答  2011-09-12
这个是逻辑或和逻辑与的短路特征,++ix=2,++iy=2,++ix&&++iy为1,因为||前面为1,整个表达式的值肯定为真,所以++iz无需运算,结果为1
第4个回答  2011-09-12
++ix=2,++iy=2,so ++ix&&++iy为1(逻辑与懂吧?同时为1得1)因为||前面为1,所以++iz无需运算,结果为1(这里是逻辑或运算,有1为1)所以im为1 不知道懂不懂。。。

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网