A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© gundana121 中级黑马   /  2015-7-22 21:09  /  2328 人查看  /  24 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

int x,y,z;
x=y=z=0;
++x || ++y && z++;
y为什么是0
++级别最高,算完了才与之后在或啊,他问什么短路啊

24 个回复

倒序浏览
逻辑或运算符有个性质:当它的第一个操作数为 true 或者非0时,则不对第二个操作数进行运算.
回复 使用道具 举报
++x   一看是1,为真,对于或运算符来说,它的总的结果一定是真了,所以系统默认不再继续往下运算,所以++y根本就没有运算,y依然为零
回复 使用道具 举报
zpy_0806 发表于 2015-7-22 21:24
++x   一看是1,为真,对于或运算符来说,它的总的结果一定是真了,所以系统默认不再继续往下运算,所以++y ...

好吧就这么认为吧
回复 使用道具 举报
原来是酱紫,我也算明白了
回复 使用道具 举报
我也对这个感到有点疑惑
回复 使用道具 举报
花漾 中级黑马 2015-7-22 22:16:54
7#
++X=1为真后面就不考虑了,所以Y还为0
回复 使用道具 举报
++x非零  ++y被短路没被执行  所以为零
回复 使用道具 举报
++x最高,先算了,然后系统是先从左往右扫描,扫到 || 的时候,直接把后面的都跳过了。虽然&&级别高,但是系统就这么任性。你把这段代码打到电脑上会报错。你把&&加个()估计会好,但是结果还是y=0.
回复 使用道具 举报
我知道你的疑惑是, 为什么不是先执行优先级高的,但是计算机是按顺序编译和执行程序 不会跳跃执行
好多人对运算符优先级有误区:  运算符优先级是指他们的结合性优先级(谁的优先级别高,操作数与谁最先结合), 并不是指运算先后优先级.      
  运算符并没有说他们运算次序是什么,有得编译器是从左往右,有的是从右往左 还有的编译器是两边同时进行  这个和编译器和系统环境有关.
但是不管C语言规定   ||   &&  和条件运算符强制从左往右运算 , 比如 ||  当左值确定为真,  右值不用进行运算        
回复 使用道具 举报
后面所有运算全部不执行了,值都是0,查下字典:逻辑短路
回复 使用道具 举报
++x || ++y && z++;    等价于  ++x || (++y && z++);   前面的++x 成立了  后面就不再运行咯
回复 使用道具 举报
||或运算,从左到右,左边++x为1也就是帧了,那么后面就不计算了。直接返回真。所以y是0
回复 使用道具 举报
++x运算后,x变成1,||后面的就不执行
回复 使用道具 举报
同上。。。。。。。。。。。。。
回复 使用道具 举报
原来这么简单。。。
回复 使用道具 举报
或运算++x已经为真了,就没必要在计算了
回复 使用道具 举报
Northcity 发表于 2015-7-22 22:54
我知道你的疑惑是, 为什么不是先执行优先级高的,但是计算机是按顺序编译和执行程序 不会跳跃执行
好多人对 ...

相当有道理,谢谢,领教了
回复 使用道具 举报
小林儿 发表于 2015-7-22 22:28
++x最高,先算了,然后系统是先从左往右扫描,扫到 || 的时候,直接把后面的都跳过了。虽然&&级别高,但是 ...

这个不报错,在视频上看到的,运行了没问题,不过你这个言简意赅的系统任性完美解决我的疑问
回复 使用道具 举报
根据逻辑或一真则真的原则,如果++x表达式为真(1)就不用执行||后面的表达式,y和z为原值;如果++x表达式为假(0)就需要判断||后面的表达式的真假
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马