文章目录
- 1. 算术操作符
- 2. 移位操作符
- 3. 位操作符
- 4. 赋值操作符
- 5. 单目操作符
- 6. 关系操作符
- 7. 逻辑操作符
- 8. 条件操作符
- 9. 逗号表达式
- 10. 下标引用、函数调用和结构成员
1. 算术操作符
+ - * / %
- 加 减 乘 除 求余
- 加减乘 都很简单没啥可讲的,这里主要讲解 除 和 求余。
1. 算术操作符 “ / ”
- 除法是用来求商的;
- 除号的两断都是整数的时候,执行的是整数除法,两端只要有一个浮点数就执行浮点数的除法。
2. 算术操作符 “ % ”
- 两个数相除,得到的结果为余数;
- 注意:与 “ / ” 不同,“ % ” 的两边必须是整数。
2. 移位操作符
<< >>
1. 左移操作符 “ << ”
2. 右移操作符 “ >> ”
3. 位操作符
& | ^
1. 按位与 “ & ”
2. 按位或 “ | ”
3. 按位异或 “ ^ ”
4. 赋值操作符
= += -= *= /= &= ^= |= >>= <<=
1. 赋值 “ = ”
- 给变量赋予一个值;
#include <stdio.h>
int main()
{
int a = 0;//初始化
a = 20;//赋值
return 0;
}
2. 加等 “ += ”
- 单纯只是形式的简化而已,后面的也一样;
#include <stdio.h>
int main()
{
int a = 0;
a = a + 3;
a += 3;//同上等价,意思一样,写法不同而已
return 0;
}
3. 减等 “ -= ”
- 后面的 “ /= ” ,“ *= ” 之类的和这些都是依葫芦画瓢。
#include <stdio.h>
int main()
{
int a = 0;
a = a - 3;
a -= 3;//同上等价,形式简化
return 0;
}
5. 单目操作符
- 只有一个操作数的操作符称之为单目操作符。
操作符 | 操作符名 |
---|---|
! | 逻辑反操作 |
- | 负值 |
+ | 正值 |
& | 取地址 |
sizeof | 操作数的类型长度(以字节为单位) |
~ | 对一个数的二进制进行按位取反 |
- - | 前置、后置- - |
++ | 前置、后置++ |
* | 间接访问操作符(解引用操作符) |
(类型) | 强制类型转换 |
1. 逻辑反 “ ! ”
- C 语言中, 0 表示假,非 0 表示真。
- 作用:真变假,假变真:将非零的值转为零,将零转为非零的值。
2. 负值 “ - ”
- 就是数学意义上的添负号;
3. sizeof
- 计算操作数所占内存的大小;
4. 前置、后置 ++
- 对于某个变量本身来说,++ 前置、后置关系都不大,都相当于是变量的值自增 1 ;
- 但是如果要将值赋给其他变量的时候,区别就来了:
- 前置++(++变量名):先让该变量的值+1,再使用自增1之后的变量;
- 后置++(变量名++):先使用该变量的值,再让该变量的值+1。
5. 前置、后置 - -
- 前置、后置 - - 和 前置、后置 ++ 原理相同,就不过多赘述了。
6. 强制类型转换
//强制类型转换
#include <stdio.h>
int main()
{
int a1 = 3.14;
//3.14 为字面浮点数,默认为 double 类型,
//所以不能赋给整形变量 a1 ,需要进行强转
int a2 = (int)3.14;//将 3.14 强转为整型然后赋给 a2
printf("%d\n", a2);//打印结果为 3,舍掉了小数点后的数
return 0;
}
6. 关系操作符
- 用来比较两者之间的大小关系的操作符
> 大于
>= 大于等于
< 小于
<= 小于等于
!= 不等于
== 等于
- 注意:两个等于号才是判断两数是否相等;
#include <stdio.h>
int main()
{
int a = 10;
if (a = 3)//只有一个等号是赋值,表达式永远为真
{
printf("判断条件永远为真,这段话永远能打印出来\n");
}
if (a == 4)
{
printf("在第一个 if 中 a 被改成了 3 所以这里用 a 是否等于 4 来判断\n");
}
return 0;
}
7. 逻辑操作符
&& 逻辑与(并且)
|| 逻辑或(或者)
1. 逻辑与 “ && ”
- 全真则真,作用的两个操作数全部都为真整个表达式才为真。
//逻辑与
#include <stdio.h>
int main()
{
int a = 10, b = 20;
if (a && b)//a 和 b 的值都得为真,表达式才为真
{
printf("逻辑与:全真则真\n");
}
a = 0;
if (a && b)//a 的值为假,整个表达式都为假
{
printf("&& 两端有一个不为真就进不来\n");
}
return 0;
}
2. 逻辑或 “ || ”
- 全假则假,作用的两个操作数全部都为假整个表达式才为假。
//逻辑或
#include <stdio.h>
int main()
{
int a = 0, b = 20;
if (a || b)//a 和 b 两个只要有一个为真,表达式就为真
{
printf("逻辑或:全假则假\n");
}
b = 0;
if (a || b)//只有 a 和 b 全为假,表达式的值才为假
{
printf("|| 两端全是假才进不来这里\n");
}
return 0;
}
8. 条件操作符
- C 语言中唯一的一个三目操作符(有三个操作数)。
exp1 ? exp2 : exp3
- 判断表达式1(exp1)的值是否为真,为真则执行表达式2(exp2),为假执行表达式3(exp3)。
举个栗子
- 题目:利用三目操作符求 4 个数中得最大值。
- 没想到用这个之前算这种题 if 用的我头皮发麻。
//三目操作符
#include <stdio.h>
int main()
{
//利用三目操作符求 4 个数中得最大值
int a, b, c, d;
scanf("%d %d %d %d", &a, &b, &c, &d);
int x = a > b ? a : b;//a 如果大于 b 则将 a 赋给 x 反之将 b 赋给 x
int y = c > d ? c : d;//同上
printf("最大值为:%d\n", x > y ? x : y);
return 0;
}
9. 逗号表达式
exp1, exp2, exp3, …expN
- 由逗号隔开的一串表达式称为逗号表达式。
- 特点:从左至右依次计算,整个表达式的结果是最后一个表达式的结果。
//逗号表达式
#include <stdio.h>
int main()
{
//从左至右依次计算,整个表达式的结果是最后一个表达式的结果
int a = 10, b = 20, c = 0;
int d = (c = a - 2, a = b + c, c - 3);
// c = 8 a = 28 5
printf("d = %d\n", d);
return 0;
}
10. 下标引用、函数调用和结构成员
[] () . ->
1. 下标引用 “ [ ] ”
- 当我们访问数组元素的时候必须要用到下标,这个操作符就是用在这了。
//下标引用 “[]”
#include <stdio.h>
int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
arr[3] = 100;//此处的[]就是下标引用操作符,
//arr 和 3 就是 [] 的操作数
return 0;
}
2. 函数调用 “ ( ) ”
//函数调用操作符 “( )”
#include <stdio.h>
int Add(int x, int y)
{
return x + y;
}
int main()
{
int sum = Add(2, 3);
//这里的 () 就是函数调用操作符,Add,2,3 都是 () 的操作数
return 0;
}