前言:每一种语言都有各自的运算符和操作符,可能相同,也可能不同,但都是条件判断的必备品,没有了它,变成就毫无意义。
1.四则运算符
四则运算当然是我们所熟悉的加减乘除了,也是最基础的1+1啊,3-1啊,6/2啊,3*3啊这些就是四则运算。但是他们都不是条件,因为他们没有等量关系。
这时候,我们的”==“出来了,两个等号表示等于,一个“=”等号表示赋值
“==”就可以组成条件了,一个等号是不能组成条件的!
例:
#include#include int main() { int a = 0; printf("请输入n"); scanf("%d",&a); if(a == 1 ) { printf("yes"); } else printf("no"); }
当我输入1时,打印结果为
当我输入其他结果时,打印结果为
如果我不小心在 if(a == 1)中少打了一个等号
那么它永远都是返回yes,因为在C语言中0为假,其他有值的变量为真.
#include#include int main() { int a = 0; printf("请输入n"); scanf("%d",&a); if(a = 1 ) { printf("yes"); } else printf("no"); }
那该怎么避免这种尴尬的情况呢?
因为在C语言中两个等号和一个等号都可以当条件,所以不会报错的
但是该怎么做才能避免这种情况?
其实只用反过来写代码就可以了
比如: 1 == a
这样万一少打一个等号,编译器就会报错
因为 常量不能被改变,那什么是常量呢?以后说。
2.取余
取余也是常见的运算符,它常常被用来查找奇数偶数,质数合数,闰年平年等等
比如 2020%400 == 0,那么2020就是闰年
例:我们随便输入一个数,判断这个数是否为奇数
#include#include int main() { //注:我把main函数的参数给删了,所以return 0;可以不用写 int num = 0; printf("请输入n"); scanf("%d",&num); if(num%2==0) { printf("偶数"); } else printf("奇数"); }
当我输入奇数时
当我输入偶数时
3.++ 和 --
++ 自增
-- 自减
这两个一般用在循环体中,而且++和--在变量的前面和后面是有所不同的。
例:
#include#include int main() { int a = 1; int b = 0; b = a ++; printf("a = %dtb = %d",a,b); }
猜猜看 a和b分别是多少?
。
。
。
。
揭晓答案
是不是有点不同呢?
因为 b = a ++是有运算优先级的
=的优先级大于++
所以先运行b = a 然后在 a ++
下表为优先级的详细关系
| 优先级 | 运算符 | 含 义 | 要求运算 对象的个数 | 结合方向 |
| 1 | () [] -> . | 圆括号 下标运算符 指向结构体成员运算符 结构体成员运算符 | 自左至右 | |
| 2 | ! | 逻辑非运算符 | 1 (单目运算符) | 自右至左 |
| ~ | 按位取反运算符 | |||
| ++ | 自增运算符 | |||
| -- | 自减运算符 | |||
| - | 负号运算符 | |||
| (类型) | 类型转换运算符 | |||
| * | 指针运算符 | |||
| & | 地址与运算符 | |||
| sizeof | 长度运算符 | |||
| 3 | * / % | 乘法运算符 除法运算符 求余运算符 | 2 (双目运算符) | 自左至右 |
| 4 | + - | 加法运算符 减法运算符 | 2 (双目运算符) | 自左至右 |
| 5 | << >> | 左移运算符 右移运算符 | 2 (双目运算符) | |
| 6 | < <= > >= | 关系运算符 | 2 (双目运算符) | 自左至右 |
| 7 | == != | 等于运算符 不等于运算符 | 2 (双目运算符) | 自左至右 |
| 8 | & | 按位与运算符 | 2 (双目运算符) | 自左至右 |
| 9 | ^ | 按位异或运算符 | 2 (双目运算符) | 自左至右 |
| 10 | | | 按位或运算符 | 2 (双目运算符) | 自左至右 |
| 11 | && | 逻辑与运算符 | 2 (双目运算符) | 自左至右 |
| 12 | || | 逻辑或运算符 | 2 (双目运算符) | 自左至右 |
| 13 | ? : | 条件运算符 | 3 (三目运算) | 自右至左 |
| 14 | = += -= *= /= %= >>= <<= &= ^= |= | 赋值运算符 | 2 | 自右至左 |
| 15 | , | 逗号运算符 | 自左至右 |
来源:C语言操作符优先级 - 畅思笔录 - 博客园 (cnblogs.com)
注:单目、双目、三目代表的是有几个表达式,比如双目代表的就是两条表达式
4.逻辑运算符
学过电子的同学因该都知道与、或、非三种门,C语言也有与、或、非三种关系
& 与
| 或
!非(“~”表示取反)
用等号可以一起表示
&= 与等于
|= 或等于
!= 不等于
(1)& 逻辑与
在电子中 1&1=1 1&0=0 ,口诀是:全1为1,有0为0;
1 和 0 都是二进制数
例:
#include#include int main() { //3&6(按每一位进行与运算) //011(3的二进制) //& ↓↓↓ //110(6的二进制) //= ↓↓↓ //010(2的二进制) //所以3&6=2 printf("%d",3&6); }
结果为
(2) |(shift+)逻辑或
在电子中 1 | 1 = 1 ;1 | 0 = 1;口诀是:全0为0,有1为1。
#include#include int main() { //3&6 //011 // | //110 //= //111 //所以3|6=7 printf("%d",3|6); }
结果为
(3)!逻辑非
有0为1,非0为0 !1=0 !0 = 1;
#include#include int main() { //!3 = 0 //!0 = 1 printf("!3 = %dn",!3); printf("!0 = %dn",!0); }
结果为
你学废了吗?



