关系运算符
运算符 | 意义 |
< | 小于 |
<= | 小于等于 |
> | 大于 |
>= | 大于等于 |
== | 等于 |
!= | 不等于 |
优先级 | 运算符 | 结合方式 |
6 | < <= >= > | 由左到右 |
7 | == != | 由左到右 |
注:
1.a==b<c等价于a==(b<c)
2.要表达6<x<8要写成(x>6)&&(x<8)
关系表达式:
形态: 表达式 关系运算符 表达式
结果: 真(1)假(0)
布尔型数据:
用于表达对错、真假的数据,C语言中没有实际的布尔类型的数据。但一般用0来表示假,用1来表示真。
注:实际上,所有非零的数都算作真。
注:C语言中没有bool型数据。所有真假都以1和0表示。同时,表示真假的1和0可以作为整型数据进行运算
代码:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a=3,b=5;
printf("%d,%d",a>b,a<b);
return 0;
}
结果:
解析:
1.这里a>b显然是错的,所以整个表达式的结果为假,值为0。而b>a显然是对的,所以表达式的结果为真,值为1。
并且可以看到我们可以将这两个值作为整型输出,自然也能作为整型参与各种运算。
逻辑运算
形态:
1.&&: 表达式 && 表达式
2.||: 表达式 || 表达式
3.!: ! 表达式
结果: 真(1)假(0)
逻辑运算符:
优先级 | 运算符 | 意义 | 结合方式 | 类比 |
2 | ! | 非 | 由左向右 | 将真假颠倒 |
11 | && | 与 | 由左向右 | 类似串联电路,要左右两个表达式都为真,整个表达式的值才为真 |
12 | || | 或 | 由左向右 | 类似并联电路,只要左右两个表达式中有一个为真,整个表达式的值就为真 |
注:
1. a>b&&x>y等价于(a>b)&&(x>y)
2. a=!b+c>0等价于a=(((!b)+c)>0)
逻辑短路
A&&B:若A为假,总表达式的值必为假,所以B表达式将不会被运算!
A||B:若A为真,总表达式的值必为真,所以B表达式将不会被运算!
代码:
#include <stdio.h>
#include <stdlib.h>
/*
这个程序用来测试逻辑短路
*/
int main()
{
int a=5,b=6,c=7,m=2,n=2;
(m=a>b)&&(n=c>b);
printf("%d\t%d\n",m,n);
a=5,b=6,c=7,m=2,n=2;
(m=a<b)||(n=c>b);
printf("%d\t%d",m,n);
}
结果:
解析:
1.对于第一个公式,因为a>b为假,所以(m=a>b)整个表达式的值为0并给m赋值为0。因为逻辑短路,所以后面n=c>b表达式不被执行。所以n的值仍为2。