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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© huyingbin 中级黑马   /  2015-6-5 09:49  /  1263 人查看  /  13 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

int x,y,z,result;
x = y = z = 0;
result = ++x || ++y && z++;
最后求y = ?
解答:++x = 1;然后就没后边事了。我想说的是 &&不是比||优先级高吗?为啥不先算++y && z++;

13 个回复

倒序浏览
  1. result = ++x || ++y && z++
复制代码
写成下面这样。
  1. result = (++x) || (++y && z++)
复制代码
这样是不是清楚点了?
这样只要结果就完全取决于(++x)了。
回复 使用道具 举报
赞成楼上说法,
回复 使用道具 举报
赞一个
回复 使用道具 举报
前2天看视频   记得里边貌似有个表  说这些运算符的运算顺序
回复 使用道具 举报
:lol确实
回复 使用道具 举报
1111111111111
回复 使用道具 举报
同  学!!
回复 使用道具 举报
看到好多次类似的问题了
优先级和求值顺序不等同的
回复 使用道具 举报
这是或运算只要知道前面是1,编译器就不会计算后面的值,因为不管后面是什么结果都是1,所以编译器还是很智能的
回复 使用道具 举报
运算符优先级不是运算优先级,而是结合性优先级,意指:高优先级的运算符所结合的变量或表达式,不能被低优先级的运算符分离。
前缀的++与后缀的++具有同样的优先级,只是执行结果不一样。他们的结合性优先级都高于&&,但是他们的运算优先级要低于||,表达式在取值时,按照递推结合,递归返回的顺序运算,所以编译器会先处理优先级低的运算符。
举个简单的例子:a+b*c,编译器会先处理+号,得知最终返回的是和值,然后再分析加号的左右两个操作数,或者操作表达式。
.(exp1   ||   exp2   &&   exp3)

//==>

//(exp1   ||   (exp2   &&   exp3))

//==>

//exp1 ? 1 :  (exp2   &&   exp3)
回复 使用道具 举报
围观学习啦,大家努力学习啊
回复 使用道具 举报
学习学习!
回复 使用道具 举报
又学到一样东西
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马