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.真值表

ab!a!ba&&ba||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.