一、运算符的优先级和结合性(简单介绍)
-
优先级
-
顾名思义 :这就像我们数学的运算规则一样,优先级越高,越先计算。
- 例如:a +b*c会被解释为 a+(b*c),而不是 (a+b)*c
-
-
结合性
假如用o表示需要两个操作数(操作数就相当于运算数)的双目操作符,那么对于a o b o c,对于左结合的运算符来说会解释为: (a o b)o c 左结合性
对于右结合的运算符来说会被解释为: a o (b o c) 右结合性
也就是说遇到优先级相同的运算符,结合性指明了表达式应从左到右运算还是从左到右运算
另外我们应该注意赋值运算符 = ,是右结合性的。 所以解释为:a=b=1 ——>a=(b=1)
前面的都是简单的介绍,接下来我们进入正题
二、关系运算及其表达式
所谓关系运算,就是对于两个数据的大小关系的一种断言,因此他的结果是一个逻辑值。
那么什么是逻辑值呢?简单来说就是真和假。
例如a=1,b=2; 那么a>b的结果就是假 C语言当中,我们用0表示假,用非零表示真
关系运算符是实现关系运算的运算符,在c语言中有六种关系运算符
分别是==(等于)
!=(不等于)
<(小于)
<=(小于等于)
>(大于)
>=(大于等于)
注意>=之间没有空格,其他的5种符号也是同理
关系表达式:用关系运算符将运算量连接起来的表达式称为是关系表达式
eg :a%2=0; a%2!=0;
表达式的结果是一个逻辑值 即(真)或(假)
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
int a, b, c;
a = 3;
b = 2;
c = 1;
printf("%d\n", a > b);
printf("%d\n", a % 2 == 0);
printf("%d\n", c != c < a);
printf("%d\n", a > b > c);
return 0;
我们可以看到结果是1 0 0 0。
接下来我们一起来分析一下程序
- a>b是对的,程序用1表示真
- a%2的结果是1并不等于0,所以 错误,用0表示假
- c!=c<a !=的优先级小于< 所以先算c<a,很明显是真,我们用表示,然后就是计算c!=1,因此结果是假,用0表示
- a>b>c 优先级相同,根据左结合性 先计算a>b,结果是真,用1表示,然后就是计算1>c,很显然不对,用0表示
三、逻辑运算及其表达式
千万要注意关系运算符的优先级比逻辑运算符的优先级高
条件表达式只能表示单一的条件,若要表示复杂的条件,那么需要用到逻辑运算表达式
eg:在C语言中想要表示x>0并且x<10不能表示为0<x<10,应该表示为x>0&&x<10(这是逻辑表达式,接下来了解)
C语言中有三种逻辑运算符:
1、&&逻辑与 只有a、b都为真 a&&b才为真
2、||逻辑或 a b中至少一个为真 a||b就为真
3、!逻辑非 若a为真,那么!a为假
很显然 逻辑运算表达式的结果仍然是逻辑值
注意 逻辑非的优先级最高,逻辑与次之,逻辑或最低
例如 a>b||c>d&&x>y等价于(a>b)||【(c>d)&&(x>y)】
逻辑运算的‘短路’