好像是“++x||++y&&++zz”,只作“++x”,老师称“stop规则”,
我不懂,这是什么规则?
怎么解释为什么“++x||++y&&++zz”,只作“++x”?
说清楚点。
“从左向右执行
1.++x 导致x=1
2. 1||任何表达式,都不用计算了所以 ++y和++z都没有执行”
这个解释的第二步,我不懂,为什么'1||任何表达式,都不用计算了'?
int x,y,z; x=y=z=0; ++x||++y&&++zz; printf("x=%d y=%d z=%d",x,y,z); 结果为什么是 x=1 y=0
答案:5 悬赏:30 手机版
解决时间 2021-02-15 20:14
- 提问者网友:了了无期
- 2021-02-15 07:33
最佳答案
- 五星知识达人网友:封刀令
- 2021-02-15 08:54
++x||++y&&++zz;
这种运算叫做short-circuit evaluation
首先你看 ++x=1
所以++x || (any expression) "一定"等於 1
因为1 || 0=1 且1 || 1 =1
所以呢
确定++x=1之後 後面的expression就不会做了
所++y跟++z就没有被执行到
这种运算叫做short-circuit evaluation
首先你看 ++x=1
所以++x || (any expression) "一定"等於 1
因为1 || 0=1 且1 || 1 =1
所以呢
确定++x=1之後 後面的expression就不会做了
所++y跟++z就没有被执行到
全部回答
- 1楼网友:神鬼未生
- 2021-02-15 12:39
表达式从左往右执行,这种逻辑或操作,只要有条件满足了,不管后面是条件是否满足,整个表达式的值都是“真”。数学知识。
x=0,++x后x=1,条件满足,后面不会在执行了,C语法特性,编译器特性
- 2楼网友:愁杀梦里人
- 2021-02-15 12:06
假如 a||b||c 或运算就是 假如这三个表达式只要有一个为真结果就为真, 如果a为真,整个表达式就为真,它肯定不会去算后面的表达式c和b 了,
所以你的程序中,++x||++y&&++z ++x就是1了,C规定非0即为真,整个表达式就为真了,后面的肯定就不算了啊,
- 3楼网友:想偏头吻你
- 2021-02-15 11:32
当程序执行逻辑“或”即“||“时,从左到右只要遇到第一个逻辑上非零的数,该语句的值也就可以确定为1,所以在C语言中后面的语句默认不需要执行。执行逻辑“与”即“&&”时,则是遇到第一个逻辑上的值为零的数则后面的语句不必执行。这个现象叫做逻辑运算符的短路现象。
- 4楼网友:从此江山别
- 2021-02-15 10:08
因为你让
z = (x==1) && (y=2)
也就是当 x==1 时 对y赋值 同时z=真即为1
可是x!=1 也就是x==1 为假 后面的就不在执行 所以 y仍为0
你想让y=2
可以改写成
z = (x==1) || (y=2)
就好了 此时 z=1 y=2
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯