
往期 C语言 知识回顾:链接: C语言基础之【C语言概述】 C语言基础之【数据类型】(上) C语言基础之【数据类型】(下)
👨💻 博主正在持续更新C语言基础系列中。
❤️ 如果你觉得内容还不错,请多多点赞。
⭐️ 如果你觉得对你有帮助,请多多收藏。(防止以后找不到了)
👨👩👧👦 C语言基础系列 持续更新中~,后续分享内容主要涉及 C++全栈开发 的知识,如果你感兴趣请多多关注博主。
运算符:C语言中用于操作数据的基本工具。
运算符类型 | 作用 |
|---|---|
算术运算符 | 用于基本的数学运算 |
赋值运算符 | 用于给变量赋值 |
关系运算符 | 用于比较两个值的大小关系(并返回一个布尔值) |
逻辑运算符 | 用于逻辑判断(并返回一个布尔值) |
位运算符 | 用于对二进制位进行操作 |
条件运算符 | 用于简单的条件判断 |
指针运算符 | 用于操作指针 |
逗号运算符 | 用于分隔多个表达式,返回最后一个表达式的值 |
类型转换运算符 | 用于强制类型转换 |
sizeof运算符 | 用于获取数据类型或变量的大小(字节数) |
+、-、*、/、% 、++、-- 等。
=、+=、-=、*=、/=、%=、<<=、>>=、&=、^=、|= 等。
==、!=、>、<、>=、<= 等。
比较运算符&&、||、! 等。
&、|、^、~、<<、>> 等。
? :
三元运算符,其格式为表达式1? 表达式2 : 表达式3& 和 *
*用于获取指针所指向的变量的值。
&用于获取变量的地址。
,
int a = (1 + 2, 3 + 4);,a的值为7(类型)
sizeof(int)可以得到int类型在当前系统中所占用的字节数sizeof(a)可以得到变量a所占用的字节数
算术运算符:用于基本的数学运算
运算符 | 术语 | 示例 | 结果 |
|---|---|---|---|
| 正号 | +3 | 3 |
- | 负号 | -3 | -3 |
| 加 | 10 + 5 | 15 |
- | 减 | 10 - 5 | 5 |
* | 乘 | 10 * 5 | 50 |
/ | 除 | 10 / 5 | 2 |
% | 取模(取余) | 10 % 3 | 1 |
++ | 前置自增 | a=2; b=++a; | a=3; b=3; |
++ | 后置自增 | a=2; b=a++; | a=3; b=2; |
-- | 前置自减 | a=2; b=--a; | a=1; b=1; |
-- | 后置自减 | a=2; b=a--; | a=1; b=2; |
+):表示正数,通常可以省略。-):表示负数。+):用于两个数的加法运算。-):用于两个数的减法运算。*):用于两个数的乘法运算。/):用于两个数的除法运算。%):用于两个数的取模运算,返回余数。++):先自增,再使用变量的值。++):先使用变量的值,再自增。--):先自减,再使用变量的值。--):先使用变量的值,再自减。变量值的更新时机
赋值运算符:用于给变量赋值
运算符 | 术语 | 示例 | 结果 |
|---|---|---|---|
= | 赋值 | a=2; b=3; | a=2; b=3; |
+= | 加等于 | a=0; a+=2; | a=2; |
-= | 减等于 | a=5; a-=3; | a=2; |
*= | 乘等于 | a=2; a*=2; | a=4; |
/= | 除等于 | a=4; a/=2; | a=2; |
%= | 模等于 | a=3; a%=2; | a=1; |
=):将右侧的值赋给左侧的变量。+=):将左侧变量与右侧值相加,结果赋给左侧变量。-=):将左侧变量与右侧值相减,结果赋给左侧变量。\*=):将左侧变量与右侧值相乘,结果赋给左侧变量。/=):将左侧变量与右侧值相除,结果赋给左侧变量。%=):将左侧变量与右侧值取模,结果赋给左侧变量。
关系运算符:用于比较两个值的大小关系,返回布尔值(1表示真,0表示假)
运算符 | 术语 | 示例 | 结果 |
|---|---|---|---|
== | 等于 | 4 == 3 | 0 |
!= | 不等于 | 4 != 3 | 1 |
< | 小于 | 4 < 3 | 0 |
> | 大于 | 4 > 3 | 1 |
<= | 小于等于 | 4 <= 3 | 0 |
>= | 大于等于 | 4 >= 3 | 1 |
==:检查两个值是否相等,相等返回 1,否则返回 0!=:检查两个值是否不相等,不相等返回 1,否则返回 0<:检查左侧值是否小于右侧值,是则返回 1,否则返回 0>:检查左侧值是否大于右侧值,是则返回 1,否则返回 0<=:检查左侧值是否小于或等于右侧值,是则返回 1,否则返回 0>=:检查左侧值是否大于或等于右侧值,是则返回 1,否则返回 0
逻辑运算符:用于逻辑判断(并返回一个布尔值)
运算符 | 术语 | 示例 | 结果 |
|---|---|---|---|
! | 逻辑非 | !a | 用于对一个布尔值取反 |
&& | 逻辑与 | a && b | 用于判断两个条件是否同时为真 |
逻辑或 | 用于判断两个条件是否至少有一个为真 |

!(逻辑非)
非零),则结果为假(0)0),则结果为真(1) &&(逻辑与)
1)0) ||(逻辑或)
1)0)运算符优先级: 决定了表达式中运算符的执行顺序。
优先级 | 运算符 | 名称或含义 | 使用形式 | 结合方向 | 说明 |
|---|---|---|---|---|---|
1 | [] | 数组下标 | 数组名[常量表达式] | 左到右 | – |
() | 圆括号 | (表达式)/函数名(形参表) | 左到右 | – | |
. | 成员选择(对象) | 对象.成员名 | 左到右 | – | |
-> | 成员选择(指针) | 对象指针->成员名 | 左到右 | – | |
2 | - | 负号运算符 | -表达式 | 右到左 | 单目运算符 |
~ | 按位取反运算符 | ~表达式 | 右到左 | 单目运算符 | |
++ | 自增运算符 | ++变量名/变量名++ | 右到左 | 单目运算符 | |
-- | 自减运算符 | –变量名/变量名– | 右到左 | 单目运算符 | |
* | 取值运算符 | *指针变量 | 右到左 | 单目运算符 | |
& | 取地址运算符 | &变量名 | 右到左 | 单目运算符 | |
! | 逻辑非运算符 | !表达式 | 右到左 | 单目运算符 | |
(类型) | 强制类型转换 | (数据类型)表达式 | 右到左 | – | |
sizeof | 长度运算符 | sizeof(表达式) | 右到左 | – | |
3 | * | 乘 | 表达式*表达式 | 左到右 | 双目运算符 |
/ | 除 | 表达式/表达式 | 左到右 | 双目运算符 | |
% | 余数(取模) | 整型表达式%整型表达式 | 左到右 | 双目运算符 | |
4 |
| 加 | 表达式+表达式 | 左到右 | 双目运算符 |
- | 减 | 表达式-表达式 | 左到右 | 双目运算符 | |
5 | << | 左移 | 变量<<表达式 | 左到右 | 双目运算符 |
>> | 右移 | 变量>>表达式 | 左到右 | 双目运算符 | |
6 | > | 大于 | 表达式>表达式 | 左到右 | 双目运算符 |
>= | 大于等于 | 表达式>=表达式 | 左到右 | 双目运算符 | |
< | 小于 | 表达式<表达式 | 左到右 | 双目运算符 | |
<= | 小于等于 | 表达式<=表达式 | 左到右 | 双目运算符 | |
7 | == | 等于 | 表达式==表达式 | 左到右 | 双目运算符 |
!= | 不等于 | 表达式!=表达式 | 左到右 | 双目运算符 | |
8 | & | 按位与 | 表达式&表达式 | 左到右 | 双目运算符 |
9 | ^ | 按位异或 | 表达式^表达式 | 左到右 | 双目运算符 |
10 | 按位或 | 表达式|表达式 | 左到右 | 双目运算符 | |
11 | && | 逻辑与 | 表达式&&表达式 | 左到右 | 双目运算符 |
12 | 逻辑或 | 表达式||表达式 | 左到右 | 双目运算符 | |
13 | ?: | 条件运算符 | 表达式1?表达式2:表达式3 | 右到左 | 三目运算符 |
14 | = | 赋值运算符 | 变量=表达式 | 右到左 | – |
*= | 乘后赋值 | 变量*=表达式 | 右到左 | – | |
/= | 除后赋值 | 变量/=表达式 | 右到左 | – | |
%= | 取模后赋值 | 变量%=表达式 | 右到左 | – | |
+= | 加后赋值 | 变量+=表达式 | 右到左 | – | |
-= | 减后赋值 | 变量-=表达式 | 右到左 | – | |
<<= | 左移后赋值 | 变量<<=表达式 | 右到左 | – | |
>>= | 右移后赋值 | 变量>>=表达式 | 右到左 | – | |
&= | 按位与后赋值 | 变量&=表达式 | 右到左 | – | |
^= | 按位异或后赋值 | 变量^=表达式 | 右到左 | – | |
按位或后赋值 | 变量|=表达式 | 右到左 | – | ||
15 | , | 逗号运算符 | 表达式,表达式,… | 左到右 | – |

类型转换 :指将一种数据类型的值转换为另一种数据类型的过程。
数据有不同的类型,不同类型数据之间进行混合运算时必然涉及到类型的转换问题。
类型转换可以分为两种:
隐式类型转换(自动类型转换):隐式类型转换是由编译器自动完成的。
显式类型转换(强制类型转换):通过程序员手动指定的。
(类型)(目标类型) 表达式隐式类型转换:
从小类型向大类型转换:
如果表达式中包含不同类型的操作数,较小的类型会自动转换为较大的类型。

int a = 10;
double b = 3.14;
double c = a + b; // a 自动转换为 double 类型赋值时的类型转换:
如果赋值时右侧表达式的类型与左侧变量的类型不一致,右侧的值会自动转换为左侧变量的类型。
int a = 10;
double b = 3.14;
a = b; // b 的值被截断为 int 类型,a = 3显式类型转换:
int a = 10;
int b = 3;
double c = (double)a / b; // 将 a 强制转换为 double 类型,结果为 3.333...注意事项:强制类型转换可能会导致数据丢失或精度损失。
double d = 3.14;
int i = (int)d; // i = 3,小数部分丢失类型转换的常见场景
1.算术运算中的类型转换
如果表达式中包含不同类型的操作数,较小的类型会自动转换为较大的类型。
int a = 10;
double b = 3.14;
double c = a + b; // a 自动转换为 double 类型2.赋值时的类型转换
如果赋值时右侧表达式的类型与左侧变量的类型不一致,右侧的值会自动转换为左侧变量的类型。
int a = 10;
double b = 3.14;
a = b; // b 的值被截断为 int 类型,a = 33.函数调用时的类型转换
如果函数参数的类型与实参的类型不一致,实参的值会自动转换为形参的类型。
void print(double d)
{
printf("%f\n", d);
}
int main()
{
int a = 10;
print(a); // a 自动转换为 double 类型
return 0;
}4.指针类型转换
指针类型之间的转换需要显式类型转换。
int a = 10;
int *p = &a;
double *q = (double *)p; // 将 int 指针强制转换为 double 指针#include <stdio.h>
int main()
{
int num = 5;
printf("s1=%d\n", num / 2);
printf("s2=%lf\n", num / 2.0);
return 0;
}输出: s1=2 s2=2.500000
1.整数除法:
5 / 2 的结果是 22.浮点数除法:
5 / 2.0 的结果是 2.5总结:整数除法会截断小数部分,而浮点数除法会保留小数部分。
显式类型转换指的是使用
强制类型转换运算符,将一个变量或表达式转化成所需的类型。 其基本语法格式:(类型说明符) (表达式)
#include <stdio.h>
int main()
{
float x = 0;
int i = 0;
x = 3.6f;
i = x; //x为实型, i为整型,直接赋值会有警告
i = (int)x; //使用强制类型转换
printf("x=%f, i=%d\n", x, i);
return 0;
}输出: x=3.600000, i=3