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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 谁想去飞 中级黑马   /  2014-11-14 23:47  /  1708 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

int x=0,y=0,z=0;
++x||++y&&++z;
printf("%d,%d,%d",x,y,z);
输出 x y z 的值分别是多少  他们是怎么运算的?

评分

参与人数 1黑马币 +1 收起 理由
星河鹭起 + 1

查看全部评分

10 个回复

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

请问x=2怎么来的
回复 使用道具 举报
sfm 中级黑马 2014-11-15 13:11:23
报纸
这个多看看运算符的优先级就会好理解了。
回复 使用道具 举报
谁想去飞 发表于 2014-11-14 23:53
首先是从左往右的。 t=++x||++y&&++z  第一步: t= (++x) || (++y&&++z); 因为||这个符号的优先级最低。  第 ...

各种看都是x==1把。。。这x==2真心看不懂你事怎么算得,y和z必须是0
回复 使用道具 举报
楼主笔误了吧?从哪跑出了的2啊:o
回复 使用道具 举报
先给x   + 1,若等于0,计算右边,分别给y和z   +1后若不为0整个表达式不为0,若x   +1不等于0则不计算右边的表达式;
输出1 0 0
回复 使用道具 举报
不过左自加不是先自加再运算么, x==1 为真了,继续右边
回复 使用道具 举报
这个主要考核的是运算符优先级的问题,建议你看一下,运算符优先级表
回复 使用道具 举报
恕小弟眼瞎,逻辑运算符为什么要这么用
||运算符,只执行一个边,而且你代码还写错了
++x||(++y&&++z);
其实这代码就执行了个++x的后传值
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马