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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© kaiyan1208 中级黑马   /  2015-4-11 08:06  /  1006 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

如题: int x,y,z;
++x || ++y && z++
问x,y,z是多少?答案是x=1,y=0,z=0
昨天大家一直在研究这个问题,大家有好多见解
见解1;
   这个是一个语言为增强自己的效率,而这样运算的,算是高级语言的这一种特性.
见解2:
   ......记不清了
反正我听大家几乎没有人有一种解释,那我也给大家说说我的想法

个人认为这个是语言的扫描问题,他要从前往后扫描,扫描到  1 || ***  后面的时随机,扫描到这里的时候,语言自己判断这个已经可以计算出结果,所以他不会再往下执行,

思路比较乱,就写这么多

6 个回复

倒序浏览
kaiyan1208 来自手机 中级黑马 2015-4-11 12:39:20
沙发
没有人回复,自己顶一下,讨论讨论
回复 使用道具 举报
顶下,支持一下下
回复 使用道具 举报
int x = 0,  y = 0, z = 0;
++x || ++y&&z++;

1.由于优先级原因++x || ++y && z++ 等价于  ++x || (++y && z++);
2.逻辑运算从左向右运算,++x = 1,条件为真;
3.条件a || 条件b   运算过程,当条件a不成立,然后判断条件b,若条件b成立,为真,条件b不成立,为假;
当条件a成立,则不会判断条件b,为真;
4.++x 后 x = 1 为真,所以不会执行后面的代码  x=1 ,y=0,z=0;

其实有些问题直接可以在百度,google上得到答案的

评分

参与人数 1黑马币 +10 收起 理由
fantacyleo + 10 虽是百度但点出了优先级的实质.

查看全部评分

回复 使用道具 举报
恩 对的 学习了
回复 使用道具 举报
这个还是要考虑优先级的,但是我们说的优先级并不是先计算,而是先组合,所以就是先把(++y && z++)组合在一起作为一个整体条件来看,但是并没有计算,这样的话这个表达式就变成了一个逻辑或了当++X成立时右边的条件(也就是(++y && z++))就不看了,如果++X不成立的话就会先计算(++y && z++),看(++y && z++)的返回值是真是假,如果为真那整个表达式就为真,反正为假
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马