逻辑表达式
1、逻辑运算符:
&&、||、!,分别称为与、或、非
优先级:
逻辑非(!) > 算术运算符
赋值运算符 < 逻辑与(&&),逻辑或(||) < 关系运算符
结合方向:
逻辑非(!) 为右结合,逻辑与(&&)和逻辑或(||)为左结合。
结合方向:指当表达式中出现多个相同优先级的运算符时,这些运算符的运算顺序。
1、左结合(从左到右) 大多数运算符都是左结合,计算顺序为从左向右。
a+b+c ==> (a+b)+c
a*b*c ==> (a*b)*c
2、右结合(从右到左)
少数运算会是右结合,计算顺序从右向左。
a=b=c => a=(b=c)
*p++ => *(p++)
- 运算规则
A && B 值为1当且仅当A与B均非零;
A || B 值为0当且仅当A与B均为零;
!A 值为0当且仅当A非零;
A | B | A&&B | A∥B | !A |
---|---|---|---|---|
0 | 0 | 0 | 0 | 1 |
0 | 非0 | 0 | 1 | 1 |
非0 | 0 | 0 | 1 | 0 |
非0 | 非0 | 1 | 1 | 0 |
逻辑表达式
用逻辑运算符(逻辑与&&,逻辑或||,逻辑!)把两个表达式连接起来的式子,称为逻辑表达式,逻辑表达式的值只有0或1。
与表达式
设A,B是两个表达式,如果一个表达式通过运算符的优先级别和结合方向最终可归结为A&&B的形式,则称这个表达式为逻辑与表达式,简称与表达式
逻辑与表达式的计算过程:对于与表达式,先计算运算符&&左边(&&为左结合)当左边的值为0时,则不需要再计算右边的表达,(此时该表达式的值一定为0);当左边不为0时,才需要计算右边
例
int a=1,b=2;
--a&&(b=a+3)
a=0
b=2
该式子值为0
例2:
int a=1,b=2;
++a&&(b=a+3)
a=2
b=5
该式子值为1
逻辑或表达式
设A,B是两个表达式,如果一个表达式通过运算符优先级和结合方向最终可归结为A||B的形式,则称这个式子为逻辑或表达,简称或表达式
逻辑或表达式的计算过程:对于或表达式,先计算运行符||的左边,当左边的表达式值为非0时,不再计算右边(该式子结果一定为1);当左边为0时,再计算右边。
例1:
int i=-1,j,k;
j=k=2;
++i||j++||++k;
等价于 (++i||j++)||++k
++i 值为0
j++ 值为3
(++i||j++) 值为1
i=0;j=3;k=2
例2:
int i=-1,j,k;
j=k=2;
++i&&j++||++k;
等价于 (++i&&j++)||++k;
i=0;
j=2;
(++i&&j++) 值为0
k=3;
非表达式
设A是一个表达式,如果某个表达式通过运算符优先级和结合方向最终可归结为!A的形式,则称这个式子为逻辑非表达,简称非表达式
用C语言表达实际问题
例:用C语言的表达式表达以下实际问题
1,数学表达式3≤x<5
(x>=3) && (x<5) 或 x>=3 && x<5
2、3条线段x,y,z构成一个三角形
x+y>z && x+z>y && z+y>x 或 (x+y>z) && (x+z>y) && (z+y>x)
3、p不等于0
p!=0 或 p
4、p等于0
p==0 或!p
5、n为偶数
n%2==0 或 !(n%2)
6、年份year为闰年
(year%4==0 && year%100!=0) || year%400==0 或 !(year%4)&&year%100||!(year%400)
评论0
暂时没有评论