C语言中ll 和&&优先级问题:如何验证&&优先级比||高而避开惰性原则?

C语言中ll 和&&优先级问题:如何验证&&优先级比||高而避开惰性原则?当我用类似1||1&&0验证时会遇到惰性原则,即计算机运行||前为1了就不继续运算||后的了 有没有大佬能用避开惰性原则的方法说明&&优先级比||高?
&&的优先级是比||高的 具体体现在 --x||--y&&++z应该是先判断--x是否为0 为0继续判断(--y&&++z)而不是判断--y --x为1则不继续判断后面 有没有具体的优先级影响运算结果的实例举一下?

c语言逻辑判断是从左到右顺序判断的。
--x||--y&&++z。。从反汇编语句中就可以看出来,是先判断--x,然后再判断后面。
虽然&&是优先于||,但他们是同级的,即使先判断后面的,最后还是会需要判断--x,所以,--x在前,直接判断--x,如果为1,就直接不需要判断后面的了,会节省很多时间。
--y&&++z||--x。。就会先判断前面--y&&++z。。说明逻辑判断&&、||是同一级别的,都是从左到右开始判断。。用反汇编来检查顺序就可知道。
怎么体现&&的优先级呢?
如:--x||--y&&++z||++n。。虽然还是从左到右的顺序逻辑判断,而中间的--y&&++z,一定是需要先计算--y&&++z的结果,才能和--x与++n来判断。。
而不是先--x||--y,然后&&++z,这就是&&优先级的体现了。追问

可是这个--x||--y&&++z||++n不管是有没有这个优先级 结果都是一样的呀😳 也就是说我从左往右运行和先进行逻辑与运算是一个结果 我在实际操作里面也没有碰到过有区别的 那既然没区别 为啥还要设置这样一个优先级呢 是为了让我们理解计算机是如何运行的吗 还是说确实有影响结果的例子 ?

追答

虽然结果最终都是一样的,优先级高代表着先计算,这就是优先级的规定原因。
是计算机运行的顺序,而不是为了给人的逻辑分析。。
计算机会先判断--x是否为0,然后判断--y&&++z这个整体是否为0,最后判断++n。。
记住:优先级是针对计算机的运行规范,而不是给你、给人的计算顺序。
如果没有这个优先级,计算机就会在判断完了--x是否为零后,直接判断--y是否为0,等于先判断的是--x||--y,然后&&++z,这是没有&&优先级的规范了。
对于编程者来说,可以认为他们是同级。

追问

好的 谢谢

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-01-17

查百科优先级词条即可知道所有运算符优先级

网页链接

实际写代码中并不用关注这个问题  一般需要复杂表达式的情况下会尽可能进行拆分,如果实在无法拆分,也应该尽可能全部加上括号,以防在优先级上产生问题

追问

好的

第2个回答  2019-01-17
运算符
按位与 (&)优先级 8, 用于: 表达式 & 表达式
逻辑与 (&&) 优先级 11, 用于: 表达式 && 表达式
逻辑或 ( || ) 优先级 12, 用于: 表达式 || 表达式
条件运算符 (?:) 优先级 13, 用于三目运算: 表达式1? 表达式2: 表达式3
优先级 8 高于 11, 高于 12, 高于 13。
第3个回答  2019-01-16
C语言里面&&和||都是逻辑操作,一个是逻辑与一个逻辑或,他们的优先级是一致的。追问

不是一致的 &&的优先级是比||高的 具体体现在 --x||--y&&++z应该是先判断--x是否为0 为0继续判断(--y&&++z)而不是判断--y --x为1则不继续判断后面 如果是同优先级 就不会发这个问题了…

追答

你说的对的,C语言有一个Operators Precedence的表,那个&&的确是在||的上面。我觉得你的例子就是挺好的呀

相似回答