整型变量a的值为10,b的值为3,则执行表达式b%=b++||++a后的两个变量的值是多少?
整型变量a的值为10,b的值为3,则执行表达式b%=b++||++a后的两个变量的值是多少? 本人没学过C++,帮朋友过来提问的:sweat: 本帖最后由 爱你没错 于 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: a=10 和 b=0
我运行出来的{:9_240:} 爱你没错 发表于 2015-10-18 13:08
b%=b++||++a等价于 b=(b++||++a)%b 按照C语言运算优先级:先算括号里的表达式,括号里的表达式是自加运算符和 ...
结果是10 和0 你是不是搞错了!!! 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跳过去了
本帖最后由 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; a 的值怎么解释,不论怎么算, a是自加了啊,运算的结果是10,0.不懂,,,,, 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,谢谢及时提醒,不然要给贴主误会了,真对不起! NBeeeeee 发表于 2015-10-18 15:21
结果是10 和0 你是不是搞错了!!!
对不起,忘记了C语言的逻辑短路规则,谢谢指点 小伪 发表于 2015-10-18 17:31
a 的值怎么解释,不论怎么算, a是自加了啊,运算的结果是10,0.不懂,,,,,
C语言逻辑短路----即如果逻辑运算符||左边的表达式为真时右边的表达式就不会参与运算了,同理逻辑运算符&&左边的表达式为假时右边的表达式也不会进行运算了 爱你没错 发表于 2015-10-18 17:58
C语言逻辑短路----即如果逻辑运算符||左边的表达式为真时右边的表达式就不会参与运算了,同理逻辑运算符 ...
哦你这么一说我也明白点了,怪不得反汇编的时候没看懂,他先对比第一个寄存器就直接跳转到结果了,原来是因为 一地步是真 就不计算右边的了 爱你没错 发表于 2015-10-18 17:58
C语言逻辑短路----即如果逻辑运算符||左边的表达式为真时右边的表达式就不会参与运算了,同理逻辑运算符 ...
谢谢了,,懂了,以后用的时候还真的要小心了。。。。
页:
[1]