鱼C论坛

 找回密码
 立即注册
查看: 5959|回复: 11

[已解决]整型变量a的值为10,b的值为3,则执行表达式b%=b++||++a后的两个变量的值是多少?

[复制链接]
发表于 2015-10-18 13:08:23 | 显示全部楼层 |阅读模式
0鱼币
整型变量a的值为10,b的值为3,则执行表达式b%=b++||++a后的两个变量的值是多少?   本人没学过C++,帮朋友过来提问的:sweat:
最佳答案
2015-10-18 13:08:24
本帖最后由 爱你没错 于 2015-10-18 17:54 编辑

b%=b++||++a等价于 b=b%(b++||++a), 按照C语言运算优先级:先算括号里的表达式,括号里的表达式是自加运算符和逻辑或,自加比逻辑高,由于C语言逻辑或跟逻辑与有短路的规定,所以++a会被屏蔽掉,所以结果为真1,逻辑运算运后b自加,所以此时b=4,b=4%1,所以最后 a=10, b=0:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-10-18 13:08:24 | 显示全部楼层    本楼为最佳答案   
本帖最后由 爱你没错 于 2015-10-18 17:54 编辑

b%=b++||++a等价于 b=b%(b++||++a), 按照C语言运算优先级:先算括号里的表达式,括号里的表达式是自加运算符和逻辑或,自加比逻辑高,由于C语言逻辑或跟逻辑与有短路的规定,所以++a会被屏蔽掉,所以结果为真1,逻辑运算运后b自加,所以此时b=4,b=4%1,所以最后 a=10, b=0:

评分

参与人数 1荣誉 +3 鱼币 +3 贡献 +3 收起 理由
康小泡 + 3 + 3 + 3 支持楼主!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-10-18 13:34:53 | 显示全部楼层
a=10 和 b=0  
我运行出来的

评分

参与人数 1荣誉 +1 鱼币 +5 收起 理由
NBeeeeee + 1 + 5 就凭这份机智!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2015-10-18 15:21:21 | 显示全部楼层
爱你没错 发表于 2015-10-18 13:08
b%=b++||++a等价于 b=(b++||++a)%b 按照C语言运算优先级:先算括号里的表达式,括号里的表达式是自加运算符和 ...

结果是10 和0 你是不是搞错了!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-10-18 16:22:35 | 显示全部楼层
b%=b++||++a

b++结果是3;
++a结果是11;
3||11结果是1   或运算就是两边的值不有一遍不等于0 值就为真,真就是1。
所以b++||++a的结果就是1;
b%=b++||++a就等于b%=1;
%是去余数运算,那么久是b%=1 就等于 b=3%1;b=0;  3除以1 余数为0;
a道理来说应该是+1 结果是11  我反汇编了下 ,基础知识不好,看不太懂,好像是把++a跳过去了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-10-18 16:46:37 | 显示全部楼层
本帖最后由 y290176346 于 2015-10-18 16:51 编辑
爱你没错 发表于 2015-10-18 13:08
b%=b++||++a等价于 b=(b++||++a)%b 按照C语言运算优先级:先算括号里的表达式,括号里的表达式是自加运算符和 ...


你的不对 是b=b%(b++||++a);   不信你反汇编看看 b=4%1;
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-10-18 17:31:22 | 显示全部楼层
a 的值怎么解释,不论怎么算, a是自加了啊,运算的结果是10,0.不懂,,,,,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-10-18 17:52:28 | 显示全部楼层
y290176346 发表于 2015-10-18 16:46
你的不对 是b=b%(b++||++a);   不信你反汇编看看 b=4%1;

嗯是错了,应该是b=b%(b++||++a);由于C语言逻辑或跟逻辑与有短路的规定,所以++a会被屏蔽掉,结果应该是a=10,b=4,b=4%1,谢谢及时提醒,不然要给贴主误会了,真对不起!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-10-18 17:56:05 | 显示全部楼层
NBeeeeee 发表于 2015-10-18 15:21
结果是10 和0 你是不是搞错了!!!

对不起,忘记了C语言的逻辑短路规则,谢谢指点
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-10-18 17:58:39 | 显示全部楼层
小伪 发表于 2015-10-18 17:31
a 的值怎么解释,不论怎么算, a是自加了啊,运算的结果是10,0.不懂,,,,,


C语言逻辑短路----即如果逻辑运算符||左边的表达式为真时右边的表达式就不会参与运算了,同理逻辑运算符&&左边的表达式为假时右边的表达式也不会进行运算了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-10-18 21:16:03 | 显示全部楼层
爱你没错 发表于 2015-10-18 17:58
C语言逻辑短路----即如果逻辑运算符||左边的表达式为真时右边的表达式就不会参与运算了,同理逻辑运算符 ...

哦  你这么一说我也明白点了,怪不得反汇编的时候没看懂,他先对比第一个寄存器就直接跳转到结果了,原来是因为 一地步是真 就不计算右边的了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-10-19 20:42:57 | 显示全部楼层
爱你没错 发表于 2015-10-18 17:58
C语言逻辑短路----即如果逻辑运算符||左边的表达式为真时右边的表达式就不会参与运算了,同理逻辑运算符 ...

谢谢了,,懂了,以后用的时候还真的要小心了。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-26 11:52

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表