C 逻辑运算符

逻辑运算符执行 logical-AND (&&) 和 logical-OR (||) 运算。

语法

logical-AND-expression:
inclusive-OR-expression
logical-AND-expression && inclusive-OR-expression

logical-OR-expression:
logical-AND-expression
logical-OR-expression || logical-AND-expression

备注

逻辑运算符不执行常用算术转换。 相反,它们根据其等效性为 0 计算每个操作数。 逻辑运算的结果不是 0 就是 1。 结果的类型为 int

C 逻辑运算符如下所述:

运算符 描述
&& 如果两个操作数具有非零值,则逻辑“与”运算符产生值 1。 如果其中一个操作数等于 0,则结果为 0。 如果逻辑“与”运算的第一个操作数等于 0,则不会计算第二个操作数。
|| 逻辑“或”运算符对其操作数执行“与或”运算。 如果两个操作数的值均为 0,则结果为 0。 如果其中一个操作数具有非零值,则结果为 1。 如果逻辑“或”运算的第一个操作数具有非零值,则不会计算第二个操作数。

逻辑“与”和逻辑“或”表达式的操作数从左到右进行计算。 如果第一个操作数的值足以确定运算的结果,则不会计算第二个操作数。 此效应称为“短路”计算。 在表达式的第一个操作数之后有一个序列点。 有关详细信息,请参阅序列点

示例

下面的示例演示了逻辑运算符:

int w, x, y, z;

if ( x < y && y < z )
    printf( "x is less than z\n" );

在此示例中,如果 x 小于 y,且 y 小于 z,则调用 printf 函数以输出消息。 如果 x 大于 y,则不会计算第二个操作数 (y < z) 且不会输出任何内容。 这是在编写逻辑比较时必须考虑的另一种短路计算情况。 否则,如果代码依赖于计算第二个操作数的意外结果,则它可能会导致问题。

printf( "%d" , (x == w || x == y || x == z) );

在此示例中,如果 xwyz 相等,则 printf 函数的第二个参数的计算结果将为 true,并输出值 1。 否则,它的计算结果将为 false,并打印值 0。 只要其中一个条件的计算结果为 true,计算便会停止。

请参阅