C语言学习笔记之(关系运算符和表达式,逻辑运算符和逻辑表达式)
一、C语言中的关系运算符和关系表达式
| 序 号 | 符 号 | 功 能 | 优 先 级 |
|---|---|---|---|
| 1 | > | 大于 | 优先级相同(高) |
| 2 | >= | 大于等于 | 优先级相同(高) |
| 3 | < | 小于 | 优先级相同(高) |
| 4 | <= | 小于等于 | 优先级相同(高) |
| 5 | == | 等于 | 优先级相同(低) |
| 6 | != | 不等于 | 优先级相同(低) |
例如:
b<a+2 等效于b<(a+2)
a<=b!=b>=2 等效于(a<=b)!=(b>=2)。
a=b<c 等效于a=(b<c)
1.例子
关系表达式既然是表达式,那么就应该有一个值,关系表达式的值是一个逻辑值,即“真”或“假”,关系满足,结果为真,关系不满足,结果为假。例如,关系表达式3==4的值为“假”,7<=8的值为“真”。在C语言的逻辑运算中,以“1”代表“真”,以“0”代表“假”。若a=1,b=1,c=2,则:
关系表达式a>b的值为“假”,表达式的值为0;
关系表达式a==b的值为“真”,表达式的值为1;
关系表达式a<=b+c的值为“真”,因为b+c的值为3,所以a<=3的值为“真”,表达式的值为1;
关系表达式a==c>b的值为“真”,因为c>b的值为1,等于a的值,所以表达式的值为1;
关系表达式a=b>c的值为“假”,因为b>c的值为0,所以赋值后a的值为0,整个表达式的值也为0。
二、逻辑运算符和逻辑表达式
| 运算符 | 含义 | 举例 | 说 明 |
|---|---|---|---|
| && | 逻辑与 | a&&b | 双目运算,如果a和b都为真,则结果为真,否则为假 |
| || | 逻辑或 | a||b | 双目运算,如果a和b都为假,则结果为假,否则为真 |
| ! | 逻辑非 | !a | 单目运算,如果a为假,则结果为真;如果a为真,则结果为假 |
他们三个的权重由高到低分别是:! --> && --> ||
1.真值表
| a | b | !a | !b | a&&b | a||b |
|---|---|---|---|---|---|
| 真 | 真 | 假 | 假 | 真 | 真 |
| 真 | 假 | 假 | 真 | 假 | 真 |
| 假 | 真 | 真 | 假 | 假 | 真 |
| 假 | 假 | 真 | 真 | 假 | 假 |
2.例子
#include<stdio.h>
int main()
{
int m=2,n=3,a=1,b=2; /*定义变量m,n,a和b并赋值*/
int x,y; /*定义变量x和y*/
x=(m=a>b)&&(n=a<b); /*计算逻辑表达式的值并将值赋给变量x*/
printf("x=%d,m=%d,n=%d\n",x,m,n); /*输出变量x,m和n的值*/
y=(m=a>b)||(n=a<b); /*计算逻辑表达式的值并将值赋给变量y*/
printf("y=%d,m=%d,n=%d\n",y,m,n); /*输出变量y,m和n的值*/
return 0; /*函数返回值0*/
}
//输出结果为
x=0,m=0,n=3
y=1,m=0,n=1
1.先计算左侧表达式 m=a>b:a>b 即 1>2,结果为假(C 语言中用 0 表示假)将结果赋值给 m,因此 m=0。2.逻辑与的特性:如果左侧为假(0),则整体结果一定为假,右侧表达式不会执行(短路特性)因此右侧的 n=a<b 不会被执行,n 保持初始值 3。3.最终 x=0(整个逻辑表达式结果为假)输出:x=0,m=0,n=3。4.先计算左侧表达式 m=a>b:同样 a>b 为 1>2,结果为假(0)赋值给 m 后,m=0(再次被赋值为 0)。5.逻辑或的特性:如果左侧为假(0),需要继续计算右侧表达式判断整体结果计算右侧 n=a<b:a<b 即 1<2,结果为真(C 语言中用 1 表示真)将结果赋值给 n,因此 n=1整体结果为真,因此 y=1输出:y=1,m=0,n=1.
C语言学习笔记之(关系运算符和表达式,逻辑运算符和逻辑表达式)
https://www.wsjj.top/archives/c5
评论