在 C 中使用多个逻辑运算符时意外的短路评估

Unexpected short circuit evaluation when used more than one logical operators in C

在 C 程序中: 1 || 0 && 0 结果是 1。我认为这种行为是因为 OR 运算符由于左侧的 1 而使右侧的其余部分 (0 && 0) 短路。 但 0 && 0 || 1 也会导致 1。我很困惑为什么AND运算符左侧的0没有短路0 || 1,答案不是0。 请指导我!

这与 operator precedence 有关。

逻辑与运算符的优先级高于逻辑或运算符||。所以这个:

1 || 0 && 0

解析为:

1 || (0 && 0)

还有这个:

0 && 0 || 1

解析为:

(0 && 0) || 1

所以在后一种情况下,首先评估 0 && 0。这导致值 0,所以现在您有 0 || 1。 OR 的左侧为假,因此这会导致计算右侧,从而导致 || 运算符的结果为 1.