黑马程序员技术交流社区

标题: 逻辑运算符 [打印本页]

作者: huyingbin    时间: 2015-6-5 09:49
标题: 逻辑运算符
int x,y,z,result;
x = y = z = 0;
result = ++x || ++y && z++;
最后求y = ?
解答:++x = 1;然后就没后边事了。我想说的是 &&不是比||优先级高吗?为啥不先算++y && z++;
作者: Elors    时间: 2015-6-5 09:59
  1. result = ++x || ++y && z++
复制代码
写成下面这样。
  1. result = (++x) || (++y && z++)
复制代码
这样是不是清楚点了?
这样只要结果就完全取决于(++x)了。

作者: 小龙女的萝卜    时间: 2015-6-5 11:19
赞成楼上说法,
作者: sdzwb89    时间: 2015-6-5 11:25
赞一个
作者: aofex    时间: 2015-6-5 16:28
前2天看视频   记得里边貌似有个表  说这些运算符的运算顺序
作者: 天下1083    时间: 2015-6-5 18:19
:lol确实
作者: 宋兴1228    时间: 2015-6-7 21:30
1111111111111
作者: ⒈苆都s.兲憶    时间: 2015-6-7 23:57
同  学!!
作者: 晗修    时间: 2015-6-8 01:06
看到好多次类似的问题了
优先级和求值顺序不等同的

作者: fanxing    时间: 2015-6-9 10:17
这是或运算只要知道前面是1,编译器就不会计算后面的值,因为不管后面是什么结果都是1,所以编译器还是很智能的
作者: Dast    时间: 2015-6-9 13:36
运算符优先级不是运算优先级,而是结合性优先级,意指:高优先级的运算符所结合的变量或表达式,不能被低优先级的运算符分离。
前缀的++与后缀的++具有同样的优先级,只是执行结果不一样。他们的结合性优先级都高于&&,但是他们的运算优先级要低于||,表达式在取值时,按照递推结合,递归返回的顺序运算,所以编译器会先处理优先级低的运算符。
举个简单的例子:a+b*c,编译器会先处理+号,得知最终返回的是和值,然后再分析加号的左右两个操作数,或者操作表达式。
.(exp1   ||   exp2   &&   exp3)

//==>

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

//==>

//exp1 ? 1 :  (exp2   &&   exp3)
作者: 这是829    时间: 2015-6-9 21:13
围观学习啦,大家努力学习啊
作者: chensc    时间: 2015-6-10 20:53
学习学习!
作者: 果壳里的果冻    时间: 2015-6-10 21:40
又学到一样东西




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