关于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.
展开
 我来答
松甜恬0Je4ba
2011-09-12 · TA获得超过2.6万个赞
知道大有可为答主
回答量:7475
采纳率:100%
帮助的人:3207万
展开全部
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的。
我的一亩三分地
2011-09-12 · TA获得超过948个赞
知道小有建树答主
回答量:458
采纳率:42%
帮助的人:168万
展开全部
这个问题与编译系统的优化有关。
一、逻辑运算符&&与||的优先级高于赋值运算符=;
二、逻辑与&&优先级大于逻辑或||;
三、对于逻辑表达式,如果前面部分表达式的结果已经决定了整体表达式的值,则为了提高编译速度,后面的表达式不再运算,如: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是赋值还是判断?   怎么确定啊  谢谢
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
付的蜉04
2011-09-12 · TA获得超过685个赞
知道小有建树答主
回答量:1213
采纳率:0%
帮助的人:512万
展开全部
im==1;
ix==2;
iy==2;
iz==1;

因为表达式&&已经成立,所以||后程序不会再继续运行,因为没有必要在判断了,这是机制
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
蓝骑士之阿强
2011-09-12 · TA获得超过274个赞
知道小有建树答主
回答量:177
采纳率:0%
帮助的人:141万
展开全部
这个是逻辑或和逻辑与的短路特征,++ix=2,++iy=2,++ix&&++iy为1,因为||前面为1,整个表达式的值肯定为真,所以++iz无需运算,结果为1
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
荔枝IN时尚
2011-09-12 · 超过18用户采纳过TA的回答
知道答主
回答量:84
采纳率:0%
帮助的人:44.5万
展开全部
++ix=2,++iy=2,so ++ix&&++iy为1(逻辑与懂吧?同时为1得1)因为||前面为1,所以++iz无需运算,结果为1(这里是逻辑或运算,有1为1)所以im为1 不知道懂不懂。。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式