学习C – C逻辑运算符
这些运算符可用于确定变量或值之间的逻辑。
操作符 | 含义 |
---|---|
&& | 与 |
|| | 或 |
! | 非 |
与运算符&&
逻辑与运算符&&,是组合两个逻辑表达式的二进制运算符,即两个计算为true或false的表达式。
考虑这个表达式:
test1 && test2
如果表达式test1和test2的值都为true,则此表达式计算结果为true。
如果操作数中的任一个或两个都为false,则操作结果为false。
使用&&运算符的明显地方在if表达式中。这里有一个例子:
if(age > 12 && age < 20) { printf("You are a teenager."); }
仅当age的值为13到19(含)时,才执行printf()语句。
当然,&& 运算符可以是bool变量。
您可以用以下语句替换上一条语句:
bool test1 = age > 12; bool test2 = age < 20; if(test1 && test2) { printf("You are a teenager."); }
和运算符的真值表
X | y | 结果 |
---|---|---|
true | true | true |
true | false | false |
false | true | false |
false | false | false |
使用逻辑与运算符
#include <stdio.h>
#define PERIOD "."
int main(void)
{
char ch;
int charcount = 0;
while ((ch = getchar()) != PERIOD)
{
if (ch != """ && ch != "\"")
charcount++;
}
printf("There are %d non-quote characters.\n", charcount);
return 0;
}
上面的代码生成以下结果。
或运算符||
逻辑或运算符||,检查两个或多个条件中的任何一个为真。
如果||的任一个或两个操作数运算符是真的,结果是真实的。
有当两个操作数都为false时,结果为false。
以下是使用此运算符的示例:
if(a < 10 || b > c || c > 50) { printf("At least one of the conditions is true."); }
只有在三个条件a <10,b> c或c> 50中的至少一个为真时,才执行printf()。
您可以使用&&和||逻辑运算符组合,如下面的代码片段:
if((age > 12 && age < 20) || savings > 5000) { printf ("hi."); }
您可以用以下语句替换上一条语句:
bool over_12 = age > 12; bool undere_20 = age < 20; bool age_check = over_12 && under_20; bool savings_check = savings > 50; if(age_check || savings_check) { printf ("Hi."); }
或运算符的真值表
X | y | 结果 |
---|---|---|
true | true | true |
true | false | true |
false | true | true |
false | false | false |
非运算符!
逻辑非运算符,由!表示。
!运算符是一元运算符,因为它只适用于一个操作数。
逻辑非运算符反转逻辑表达式的值:true变为false,false变为true。
if( !(age <= 12) ) { printf("Hi."); }
非运算符的真值表
X | 结果 |
---|---|
true | false |
false | true |
例子
为了说明如何在C代码中使用逻辑运算符,可以编写这段代码。
#include <stdio.h>
int main() {
int a,b;
a = 5;
b = 8;
printf("%d \n",a>b && a!=b);
printf("%d \n",!(a>=b));
printf("%d \n",a==b || a>b);
return 0;
}
上面的代码生成以下结果。
例2
以下代码显示如何测试字母大小写。
#include <stdio.h>
int main(void)
{
char letter = 0; // Stores an input character
printf("Enter an upper case letter:"); // Prompt for input
scanf(" %c", &letter); // Read the input character
if((letter >= "A") && (letter <= "Z")) // Verify uppercase letter
{
letter += "a"-"A"; // Convert to lowercase
printf("You entered an uppercase %c.\n", letter);
}
else
printf("You did not enter an uppercase letter.\n");
return 0;
}
上面的代码生成以下结果。
例3
下面的代码使用ctype.h中的函数:
#include <stdio.h>
#include <ctype.h>
int main(void)
{
char letter = 0; // Stores a character
printf("Enter an uppercase letter:"); // Prompt for input
scanf("%c", &letter); // Read a character
if(isalpha(letter) && isupper(letter))
printf("You entered an uppercase %c.\n", tolower(letter));
else
printf("You did not enter an uppercase letter.\n");
return 0;
}
上面的代码生成以下结果。