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

2024-12-02 06:56:33
推荐回答(4个)
回答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,这就是&&优先级的体现了。

回答2:

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

网页链接

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

回答3:

运算符
按位与 (&)优先级 8, 用于: 表达式 & 表达式
逻辑与 (&&) 优先级 11, 用于: 表达式 && 表达式
逻辑或 ( || ) 优先级 12, 用于: 表达式 || 表达式
条件运算符 (?:) 优先级 13, 用于三目运算: 表达式1? 表达式2: 表达式3
优先级 8 高于 11, 高于 12, 高于 13。

回答4:

C语言里面&&和||都是逻辑操作,一个是逻辑与一个逻辑或,他们的优先级是一致的。