关于C语言中的运算符小结
知识内容参考《C Primer Plus》(第6版)中文版,并结合自己的思考所写
运算符分为一下三种
- 基本运算符
- 逻辑运算符
- 其他运算符
- 按位运算符
1. 基本运算符
分类:
- 赋值运算符
- 加法运算符
- 减法运算符
- 符号运算符
- 乘法运算符
- 除法运算符
说明:C用运算符表示算术运算(注意:C没有指数运算符,不过,C的标准数学库提供了一个pow( )函数用于指数运算)
1.1.1 赋值运算符:=
说明:在C语言中,=意味着是一个赋值运算符
示例:
a = 2022;
读作“把值2022赋给变量a”
注意:
- 赋值运算符左侧必须引用一个存储位置
- 赋值行为从右往左进行
1.1.2 其他赋值运算符:+=、-=、*=、/=、%=
说明:并非一定要使用这些组合形式的赋值运算符。但是,它们让代码更紧凑,而且与一般形式相比,组合形式的赋值运算符生成的机器代码更高效
注意:组合赋值运算符与普通赋值运算符的优先级相同,算术运算符的优先级低
1.2 加法运算符:+
说明:在C语言中,加法运算符用于加法运算,使其两侧的值相加
示例:
4 + 10
注意:
相加的值(运算对象)可以是变量,也可以是常量
1.3 减法运算符:-
说明:在C语言中,减法运算符用于减法运算,使其左侧的数减去右侧的数
示例:
10 - 4
注意:
+和-运算符都被称为二元运算符,即这些运算符需要两个运算对象才能完成操作
1.4 符号运算符:-和+
说明:减号还可用于标明或改变一个值的代数符号(改变一个数的正负号)
注意:
- 以这种方式使用的负号被称为一元运算符,一元运算符需要一个运算对象
- C90标准新增了一元运算符,它不会改变运算对象的值或符号
1.5 乘号运算符:*
说明:符号*表示乘法
1.6 除法运算符:/
说明:C使用符号/来表示除法
注意:
- 整数除法和浮点数除法不同
- 浮点数除法的结果是浮点数
- 整数除法的结果是整数
- 在C语言中,整数除法结果的小数部分被抛弃,这一过程被称为截断
示例:
5 / 4
- / 4
第一行的运算结果为1
第二行的运算结果为1.75
2逻辑运算符
分类:
- 逻辑与
- 逻辑或
- 逻辑非
2.1 逻辑与:&&
说明:当且仅当左右两个关系表达式为True时,整个才为True
2.2 逻辑或:||
说明:当其中一个为True时,整个就为True
2.3 逻辑非:!
说明:将布尔值反转
3 其他运算符
分类:
- sizeof运算符
- 求模运算符
- 递增运算符
- 递减运算符
- 逗号运算符
3.1 sizeof运算符
说明:sizeof运算符以字节为单位返回运算对象的大小
3.2 求模运算符:%
说明:
- 求模运算符用于整数运算
- 求模运算给出其左侧整数除以右侧整数的余数
3.3 递增运算符:++
说明:
- 递增运算符执行简单的任务,将其运算对象递增1
- ++出现在其作用的变量前面,这是前缀模式;++出现在其作用的变量后面,是后缀模式
- 递增运算符的一个优点是,通常它生成的机器语言代码效率更高,因为它和实际的机器语言指令很相似
3.4 递减运算符:- -
说明:
- 递减运算也执行简单的任务,将其运算对象递减1
- - -出现在其作用的变量前面,这是前缀模式;- -出现在其作用的变量后面,是后缀模式
3.5 逗号运算符
说明:
- 逗号运算符把两个表达式连接成一个表达式,并保证最左边的表达式最先求值
- 逗号运算符扩展了for循环的灵活性,以便在循环头中包含更多的表达式
- 逗号运算符并不局限于在for循环中使用,但是这是它最常用的地方
4 C按位运算符
说明:C提供按位逻辑运算符和移位运算符
分类:
- 按位取反
- 按位与
- 按位或
- 按位异或
- 左移
- 右移
4.1 按位逻辑运算符
说明:4个按位逻辑运算符都用于整数数据
4.1.1 按位取反:~
说明:一元运算符~把1变为0,把0变为1
注意:该运算符不会改变原来对象的值(创建了一个可以使用或赋值的新值)
示例:
~(10011010) // 表达式
(01100101) // 结果值
4.1.2 按位与:&
说明:
- 二元运算符&通过逐位比较两个运算对象,生成一个新值
- C有一个按位与和赋值结合的运算符:&=
示例:
(10010011) & (001111101) // 表达式
(00010001) // 结果值
4.1.3 按位或:|
说明:
- 二元运算符|通过逐位比较两个运算对象,生成一个新值
- C有一个按位或和赋值结合的运算符:|=
示例:
(10010011) | (001111101) // 表达式
(10111111) // 结果值
4.1.4 按位异或:^
说明:
- 二元运算符^通过逐位比较两个运算对象,生成一个新值
- C有一个按位异或和赋值结合的运算符:^=
4.2位移运算符
说明:位移运算符向左或向右移动位
4.2.1 左移:<<
说明:
- 左移运算符(<<)将其左侧运算对象每一位的值向左移动其右侧运算符指定的位数
- 左侧运算对象移出左末端位的值丢失,用0填充空出的位置
- 该运算符产生一个新的位值,但是不改变其运算对象
示例:
(10001010) << 2 // 表达式
(00101000) // 结果值
4.2.2 右移:>>
说明:
- 右移运算符(>>)将其左侧运算对象每一位的值向右移动其右侧运算符指定的位数
- 左侧运算对象移出右末端位的值丢失
示例:
(10001010) >> 2 // 表达式
(00100010) // 结果值