逻辑运算符执行逻辑 AND (&&) 和逻辑 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 逻辑运算符:
| 操作员 | DESCRIPTION |
|---|---|
&& |
如果两个作数具有非零值,则逻辑 AND 运算符将生成值 1。 如果任一作数等于 0,则结果为 0。 如果逻辑 AND 运算的第一个作数等于 0,则不会计算第二个作数。 |
|| |
逻辑 OR 运算符对其作数执行非独占或运算。 如果两个作数都具有 0 个值,则结果为 0。 如果任一作数具有非零值,则结果为 1。 如果逻辑 OR作的第一个作数具有非零值,则不会计算第二个作数。 |
逻辑 AND 和逻辑 OR 表达式的作数从左到右计算。 如果第一个作数的值足以确定作的结果,则不会计算第二个作数。 此效果称为“短路”评估。 表达式中第一个作数之后有一个序列点。 有关详细信息,请参阅 序列点。
例子
以下示例说明了逻辑运算符:
int w, x, y, z;
if ( x < y && y < z )
printf( "x is less than z\n" );
在此示例中, printf 调用函数以打印消息(如果 x 小于 y 且 y 小于 z)。 如果 x 大于 y,则不计算第二个作数(y < z),并且不打印任何作数。 这是编写逻辑比较时必须考虑的另一种短路评估情况。 否则,如果代码依赖于评估第二个作数的副作用,则可能会导致问题。
printf( "%d" , (x == w || x == y || x == z) );
在此示例中,如果x等于或zwy函数的第二个参数printf的计算结果为 true,则输出值 1。 否则,它计算结果为 false,并打印值 0。 一旦其中一个条件评估为 true,评估就会停止。