往期 C语言 知识回顾:
链接:
C语言基础之【C语言概述】
C语言基础之【数据类型】(上)
C语言基础之【数据类型】(下)
👨💻 博主正在持续更新C语言基础系列中。
❤️ 如果你觉得内容还不错,请多多点赞。
⭐️ 如果你觉得对你有帮助,请多多收藏。(防止以后找不到了)
👨👩👧👦 C语言基础系列 持续更新中~,后续分享内容主要涉及 C++全栈开发 的知识,如果你感兴趣请多多关注博主。
常用运算符分类 运算符 :C语言中用于操作数据的基本工具。
运算符类型
作用
算术运算符
用于基本的数学运算
赋值运算符
用于给变量赋值
关系运算符
用于比较两个值的大小关系(并返回一个布尔值)
逻辑运算符
用于逻辑判断(并返回一个布尔值)
位运算符
用于对二进制位进行操作
条件运算符
用于简单的条件判断
指针运算符
用于操作指针
逗号运算符
用于分隔多个表达式,返回最后一个表达式的值
类型转换运算符
用于强制类型转换
sizeof运算符
用于获取数据类型或变量的大小(字节数)
算术运算符:包括 +、-、*、/、% 、++、-- 等。
赋值运算符:包括 =、+=、-=、*=、/=、%=、<<=、>>=、&=、^=、|= 等。
关系运算符:包括 ==、!=、>、<、>=、<= 等。
也称为比较运算符 逻辑运算符:包括 &&、||、! 等。
位运算符:包括 &、|、^、~、<<、>> 等。
条件运算符: ? :
也称为三元运算符,其格式为表达式1? 表达式2 : 表达式3 指针运算符:包括 & 和 *
*用于获取指针所指向的变量的值。
&用于获取变量的地址。
逗号运算符: ,
例如:int a = (1 + 2, 3 + 4);,a的值为7 类型转换运算符: (类型)
sizeof运算符
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
,
逗号运算符
表达式,表达式,…
左到右
–
优先级高的运算符先执行优先级相同的运算符按结合方向执行类型转换
类型转换 :指将一种数据类型的值转换为另一种数据类型的过程。
数据有不同的类型,不同类型数据之间进行混合运算时必然涉及到类型的转换问题。
类型转换可以分为两种:
隐式类型转换(自动类型转换):隐式类型转换是由编译器自动完成的。
表达式中包含不同类型的操作数。赋值时,右侧表达式的类型与左侧变量的类型不一致。 显式类型转换(强制类型转换):通过程序员手动指定的。
使用强制类型转换运算符 (类型)语法:(目标类型) 表达式隐式类型转换:
从小类型向大类型转换:
如果表达式中包含不同类型的操作数,较小的类型会自动转换为较大的类型。
在这里插入图片描述代码语言:javascript复制int a = 10;
double b = 3.14;
double c = a + b; // a 自动转换为 double 类型赋值时的类型转换:
如果赋值时右侧表达式的类型与左侧变量的类型不一致,右侧的值会自动转换为左侧变量的类型。
代码语言:javascript复制int a = 10;
double b = 3.14;
a = b; // b 的值被截断为 int 类型,a = 3显式类型转换:
代码语言:javascript复制int a = 10;
int b = 3;
double c = (double)a / b; // 将 a 强制转换为 double 类型,结果为 3.333...注意事项:强制类型转换可能会导致数据丢失或精度损失。
代码语言:javascript复制double d = 3.14;
int i = (int)d; // i = 3,小数部分丢失
类型转换的常见场景
1.算术运算中的类型转换
如果表达式中包含不同类型的操作数,较小的类型会自动转换为较大的类型。
代码语言:javascript复制int a = 10;
double b = 3.14;
double c = a + b; // a 自动转换为 double 类型2.赋值时的类型转换
如果赋值时右侧表达式的类型与左侧变量的类型不一致,右侧的值会自动转换为左侧变量的类型。
代码语言:javascript复制 int a = 10;
double b = 3.14;
a = b; // b 的值被截断为 int 类型,a = 33.函数调用时的类型转换
如果函数参数的类型与实参的类型不一致,实参的值会自动转换为形参的类型。
代码语言:javascript复制void print(double d)
{
printf("%f\n", d);
}
int main()
{
int a = 10;
print(a); // a 自动转换为 double 类型
return 0;
}4.指针类型转换
指针类型之间的转换需要显式类型转换。
代码语言:javascript复制int a = 10;
int *p = &a;
double *q = (double *)p; // 将 int 指针强制转换为 double 指针隐式类型转换代码语言:javascript复制#include
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 的结果是 2 2.浮点数除法:
当至少有一个操作数是浮点数时,结果也是浮点数。 例如:5 / 2.0 的结果是 2.5 总结:整数除法会截断小数部分,而浮点数除法会保留小数部分。
显式类型转换 显式类型转换指的是使用强制类型转换运算符,将一个变量或表达式转化成所需的类型。
其基本语法格式:(类型说明符) (表达式)
代码语言:javascript复制#include
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
