黑马程序员技术交流社区

标题: 一个运算符 [打印本页]

作者: 谁想去飞    时间: 2014-11-14 23:47
标题: 一个运算符
int x=0,y=0,z=0;
++x||++y&&++z;
printf("%d,%d,%d",x,y,z);
输出 x y z 的值分别是多少  他们是怎么运算的?

作者: 谁想去飞    时间: 2014-11-14 23:53
首先是从左往右的。 t=++x||++y&&++z  第一步: t= (++x) || (++y&&++z); 因为||这个符号的优先级最低。  第二步: ++x; 执行完之后x=2; (对于||这个符号有个特点就是如果左边是非零,那么直接就返回值了,不用执行右边了。因为没有意义,1或0还是1.)  第三部: ||左边是非零,直接结束,t=1;  所以t=1,x=2;y和z没变。
作者: 董帅军    时间: 2014-11-15 07:41
学习了,谢谢楼主
作者: supergcs    时间: 2014-11-15 10:01
谁想去飞 发表于 2014-11-14 23:53
首先是从左往右的。 t=++x||++y&&++z  第一步: t= (++x) || (++y&&++z); 因为||这个符号的优先级最低。  第 ...

请问x=2怎么来的
作者: sfm    时间: 2014-11-15 13:11
这个多看看运算符的优先级就会好理解了。
作者: dream静    时间: 2014-11-15 13:42
谁想去飞 发表于 2014-11-14 23:53
首先是从左往右的。 t=++x||++y&&++z  第一步: t= (++x) || (++y&&++z); 因为||这个符号的优先级最低。  第 ...

各种看都是x==1把。。。这x==2真心看不懂你事怎么算得,y和z必须是0
作者: start_again1112    时间: 2014-11-15 23:30
楼主笔误了吧?从哪跑出了的2啊:o
作者: 天空总是很蓝    时间: 2014-11-16 01:50
先给x   + 1,若等于0,计算右边,分别给y和z   +1后若不为0整个表达式不为0,若x   +1不等于0则不计算右边的表达式;
输出1 0 0
作者: zhaihaohk    时间: 2014-11-16 08:35
不过左自加不是先自加再运算么, x==1 为真了,继续右边
作者: 张芳涛    时间: 2014-11-21 00:02
这个主要考核的是运算符优先级的问题,建议你看一下,运算符优先级表
作者: weizhang00    时间: 2014-11-21 00:29
恕小弟眼瞎,逻辑运算符为什么要这么用
||运算符,只执行一个边,而且你代码还写错了
++x||(++y&&++z);
其实这代码就执行了个++x的后传值





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2