Cprogramming 简明教程

Logical Operators in C

C 中的逻辑运算符求值为真或假。逻辑运算符通常与布尔操作数一起使用。

逻辑 AND 运算符 ( && ) 和逻辑 OR 运算符 ( || ) 都是二元的(需要两个操作数)。逻辑 NOT 运算符 ( ! ) 是单目运算符。

由于 C 将“0”视为假,将任何非零数字视为真,因此对逻辑操作数的任何操作数都转换为布尔数据。

下表显示了 C 中的逻辑运算符 −

Operator

Description

Example

&&

称为逻辑 AND 运算符。如果两个操作数都非零,则条件变为 true。

(A && B)

称为逻辑或运算符。如果两个操作数的任何一个非零,则结果为真。

(A

B)

!

称为逻辑非运算符。用于反转其操作数的逻辑状态。如果某个条件为真,则逻辑非运算符会将其变为假。

逻辑运算符的结果遵循布尔代数原理。逻辑运算符遵循以下真值表。

Logical AND (&&) Operator

C 中的 && 运算符充当逻辑 AND 运算符。它有以下真值表 −

a

b

a&&b

true

true

True

true

false

False

false

true

False

false

false

False

上述真值表表明,仅当两个操作数都为真时,&& 的结果才为真。

Logical OR (||) Operator

C 使用双竖线符号 (||) 作为逻辑 OR 运算符。它有以下真值表 −

a

b

a

b

true

true

True

true

false

True

false

true

true

false

上述真值表表明,当其中一个操作数为真时, || 运算符的结果为真,当两个操作数都为假时为假。

Logical NOT (!) Operator

逻辑 NOT ! 运算符对布尔操作数的值求反。真变为假,假变为真。以下是它的真值表 −

A

!a

True

False

False

True

! 逻辑运算符是单目运算符,不同于其他两个逻辑运算符 &&||

Example 1

下面的示例显示了在 C 中使用逻辑运算符的方法 −

#include <stdio.h>

int main(){

   int a = 5;
   int b = 20;

   if (a && b){
      printf("Line 1 - Condition is true\n" );
   }

   if (a || b){
      printf("Line 2 - Condition is true\n" );
   }

   /* lets change the value of  a and b */
   a = 0;
   b = 10;

   if (a && b){
      printf("Line 3 - Condition is true\n" );
   } else {
      printf("Line 3 - Condition is not true\n" );
   }

   if (!(a && b)){
      printf("Line 4 - Condition is true\n" );
   }

   return 0;
}

运行代码并检查其输出:

Line 1 - Condition is true
Line 2 - Condition is true
Line 3 - Condition is not true
Line 4 - Condition is true

Example 2

在 C 中, char 类型是 int 类型的子集。因此,逻辑运算符也可以与 char 类型配合使用。

#include <stdio.h>

int main(){

   char a = 'a';
   char b = '\0'; // Null character

   if (a && b){
      printf("Line 1 - Condition is true\n" );
   }

   if (a || b){
      printf("Line 2 - Condition is true\n" );
   }

   return 0;
}

运行代码并检查其输出:

Line 2 - Condition is true

逻辑运算符通常用于构建复合布尔表达式。除了关系运算符外,逻辑运算符也在 C 中的决策控制和循环语句中使用。

Example 3

以下示例显示了 C 程序中的复合布尔表达式 −

#include <stdio.h>

int main(){

   int phy = 50;
   int maths = 60;

   if (phy < 50 || maths < 50){
      printf("Result:Fail");
   }
   else {
      printf("Result:Pass");
   }

   return 0;
}
Result:Pass

Example 4

类似的逻辑也可以使用以下运算符 && 来表达 -

#include <stdio.h>

int main(){

   int phy = 50;
   int maths = 60;

   if (phy >= 50 && maths >= 50){
      printf("Result: Pass");
   }
   else {
      printf("Result: Fail");
   }

   return 0;
}

运行代码并检查其输出:

Result: Pass

Example 5

以下 C 代码在 while 循环中使用 NOT 运算符 −

#include <stdio.h>

int main(){

   int i = 0;

   while (!(i > 5)){
      printf("i = %d\n", i);
      i++;
   }

   return 0;
}

在上述代码中, while 循环持续进行,直至表达式 "!(i > 5)" 变为假,而这发生在 "i" 的值变为大于 5。

i = 0
i = 1
i = 2
i = 3
i = 4
i = 5

C 有逻辑运算符的按位对应项,例如按位 AND (&)、按位 OR (|) 和二进制 NOT 或补码 (~) 运算符。