c语言中 0就是假,非0就是真, 10或1的效果一样
&& 和 || 都有短路特性,
0 && 表达式A,这种铁定是假,表达式A不执行
1 || 表达式 B,这种铁定真,表达式B不执行
答案:
逻辑运算符&&和||都是逻辑运算符,并不具有比较运算符的运算优先级。它们的运算顺序是由操作符之间的依赖关系所决定的。
注意:在C语言中,逻辑运算符&&和||具有短路运算的特点,即若第一个运算数已经能够确定表达式的值时,程序就不再计算第二个运算数的值,而是直接返回表达式的值。这种短路运算的方法可以避免不必要的计算,提高计算效率。
参考资料:
C语言运算符运算优先级(逻辑运算符&&和||没有比较运算符更高或更低的优先级)
C语言逻辑运算符的短路规则
你说的这个叫做逻辑表达式的短路
简单来说,a || b,那么a和b有一个真,表达式就肯定为真了。而 a && b,有一个为假,表达式就为假了。
所以c语言会”偷懒“,遇到 x || (y = 50) > z,x为真,所以 y = 50 不执行了。
可偏偏 y = 50 是一个副作用表达式(所谓副作用表达式,是指,这个表达式求值过程中,会改变变量的值)
所以这种”偷懒“会造成结果的不同。
说这个的目的在于,让你在实际开发中,尽量不要在布尔表达式中引入带有副作用的表达式,比如以上代码,可以写
y = 50;
if (x || y > z) ...
这样,无论编译器是否偷懒,结果都不变
这题跟优先级没有关系
重点在于逻辑与和逻辑或都有短路特性
另,这也就是考试内卷卷出来的题目,谁实际这样编代码会被打死