关于c语言逻辑表达式的问题,求高手啊
ix=iy=iz=1;im=++ix&&++iy||++iz;求ixiyizim的值。。。求详细过程,为什么++iz没有被运算,不是||的优先级大于=吗?++ix和++i...
ix=iy=iz=1;
im=++ix&&++iy||++iz;
求ix iy iz im的值。。。
求详细过程 ,为什么++iz没有被运算,不是||的优先级大于=吗? ++ix和++iy都为2 与运算后im为什么等于1. 展开
im=++ix&&++iy||++iz;
求ix iy iz im的值。。。
求详细过程 ,为什么++iz没有被运算,不是||的优先级大于=吗? ++ix和++iy都为2 与运算后im为什么等于1. 展开
5个回答
展开全部
c语言中,为了加快编译速度,有一条这样的规定,当一个逻辑表达式的值能够确定下来的时候,它不会执行下面的语句。
例如:a && b这个表达式,如果a为假,则 a&&b一定为假,不管b为真,还是假,也就是a等于假时,这个表达式的值已经确定了。所以b不会执行了。但,如果a为真,则 a&&b的值就确定不了,因为b若为假,则表达式为假,b为真,表达式为真,所以还需要判断b的真假,所以b会执行。
++ix 结果为2,为真。
++iy 结果为2,为真
所以++ix&&++iy 为真, 因为 ||有一个为真,就为真,所以 ++iz不会执行,因为已经得出前面为真了。
例如: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的。
展开全部
这个问题与编译系统的优化有关。
一、逻辑运算符&&与||的优先级高于赋值运算符=;
二、逻辑与&&优先级大于逻辑或||;
三、对于逻辑表达式,如果前面部分表达式的结果已经决定了整体表达式的值,则为了提高编译速度,后面的表达式不再运算,如: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。
一、逻辑运算符&&与||的优先级高于赋值运算符=;
二、逻辑与&&优先级大于逻辑或||;
三、对于逻辑表达式,如果前面部分表达式的结果已经决定了整体表达式的值,则为了提高编译速度,后面的表达式不再运算,如: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是赋值还是判断? 怎么确定啊 谢谢
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
im==1;
ix==2;
iy==2;
iz==1;
因为表达式&&已经成立,所以||后程序不会再继续运行,因为没有必要在判断了,这是机制
ix==2;
iy==2;
iz==1;
因为表达式&&已经成立,所以||后程序不会再继续运行,因为没有必要在判断了,这是机制
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个是逻辑或和逻辑与的短路特征,++ix=2,++iy=2,++ix&&++iy为1,因为||前面为1,整个表达式的值肯定为真,所以++iz无需运算,结果为1
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
++ix=2,++iy=2,so ++ix&&++iy为1(逻辑与懂吧?同时为1得1)因为||前面为1,所以++iz无需运算,结果为1(这里是逻辑或运算,有1为1)所以im为1 不知道懂不懂。。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询