一道简单的逻辑运算题

逻辑或运算的简单例题"||"

题目

若有变量声明如下:
int x =5,y = 7,z = 8;
执行表达式:z += x++||y++||++z;后,x,y,z 的值分别是( )。
A.6,7,9
B.6,8,10
C.6,8,8
D.6,8,1
在这里插入图片描述

解析

题目解析如下
答案:A
 解析:首先我们要知道逻辑或运算“||”具有短路运算的性质,即在判断“||”左右两侧的式子时,一般来说顺序是依次从左往右执行的,但由于短路运算性质,如果“||”左侧的式子为真,那么该逻辑或运算返回的结果即为左侧这个表达式的值,且“||”右侧的式子便不再继续执行,但是并不是说一个逻辑或右侧其他的运算表达式都不用继续计算了,而是仅当前这个逻辑或运算符“||”两侧的两个表达式所形成的一个结果成为一个新的值,如果右侧还有“||”,则继续按照此原则继续运算,直到所有运算都完成才返回最终结果。这便是在本题所遇到的情况。

 首先我们需要知道的是,在“z += x++||y++||++z;”这条语句没有彻底执行结束之前,x++、y++、z++这三条语句的结果,只有z发生了变化,即自加1了,请注意,这里我们并没有真正运行完这条语句,这是我们分析的,因为题目所要求的是整条语句完全运行结束后x、y、z的值。如果这三条语句全部执行了,那么当这一整个大的语句执行后,x、y、z的值是一定发生了变化的,但是如果没有,那么我们就要看具体执行哪些语句。
现在我们继续来看“z += x++||y++||++z;”这条语句,先看等号右边,有两个逻辑或运算符“||”,就要先从左边第一个“||”表达式开始看,(x++)在这里x的值并没有发生改变,所以x依然是5,即为真1,此时第一个逻辑或表达式的值就出来了,即为真1,y++并没有执行,所以y的值并没有改变,还是7

 最后就是判断z的值发生了哪些变化了,我们可以看到z在这条语句中发生了两次改变,第一次是等号右边的z++,第二次是等号左边的自加一个数,加的这个数是看我们右边表达式的结果的,所以我们继续分析右边的运算,既然我们上一步已经得到了第一个逻辑或的运算结果为真1了,并且在右边第二个也是逻辑或的情况下,我们就没必要再分析一遍了,直接同理就可以得出等号右侧整个表达式的结果为真,即1,然后就变成了z += 1;执行后z = 9

 当整个过程分析过后,我们知道了在x++、y++、z++这三条语句中,只有x++执行了,执行x = 5,整个“z += x++||y++||++z;”语句彻底执行,x = 6,y = 7 ,z = 9 。

总结

 其实这里的过程写的比较冗杂,但实际代码的运行如果理解的话笔者上面的一大篇幅解释其实并不用看,很容易就能得出答案,这里解释得有些过于冗多反而可能会让一些初学者觉得难以理解,其实并不是的,笔者只是为了更加详细地描述出具体的分析过程,便将其中的分析过程都较为细致地描述了下来。
 总结下来一句话,逻辑或,左式为真,右式不运算,整个都为真。对于逻辑与也是类似的,相关注意点大家可以下去查阅哦~

好了,关于本题的解析到这里就介绍完毕了,感谢您的阅读!如果有疑问的地方欢迎在评论区留言评论。

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值