运算符是告诉编译程序执行特定算术或逻辑操作的符号。C语言的运算范围很宽,把除了控制语句和输入/输出以外几乎所有的基本操作都作为运算符处理。
无论是加减乘除还是大于、小于,都需要用到运算符,C语言中的运算符和平时用的运算符基本上都差不多。运算符包括赋值运算符、算术运算符、逻辑运算符、位逻辑运算符、位移运算符、关系运算符、自增自减运算符、条件运算符、逗号运算符等等。
大多数运算符都是二目运算符,即运算符位于两个表达式之间。
单目运算符的意思是运算符作用於单个表达式‘
目录
(一)赋值运算符
赋值语句的作用是把某个常量、变量、或表达式的值赋给另一个变量,符号为“=”。这里并不是等于的意思,只是赋值,等于用“==”表示。
赋值语句左边的变量在程序的其他地方必须要声明。
赋值语句中,变量在左边,值在右边。
赋值语句左边不允许存在表达式。
(二)算术运算符
在C语言中有两个单目和五个双目运算符。
单目:
- +正
- -负
双目:
- *乘法
- /除法
- %取模 : 用于计算两个整数相除所得的余数。
- +加法
- -减法
运算符有顺序问题,先算乘除再算加减,单目正和单目负最先运算。
强制类型转换
(三)逻辑运算符
逻辑运算符是根据表达式的值来返回真值或是假值。其实在C语言中没有所谓的真值和假值,只是认为非0为真值,0为假值。
符号功能:&&逻辑与,||逻辑或,!逻辑非。
需要注意的一点是,当一个逻辑表达式的后一部分的取值不会影响整个表达式的值时,后一部分就不会进行运算了。
这算是一个错误,相当于python中的短路求值的错误,应该避免。
(四)关系运算符
关系运算符是对两个表达式进行比较,各关系返回一个真/假值。
需要注意的是等于(==)和赋值(=)的区别。
(五)自增自减运算符
自增运算符(++)和自减运算符(--)对变量的操作结果是增加1和减少1。
(六)复合赋值运算符
复合赋值运算符实际上是一种缩写形式,使得对变量的改变更为简洁。比如
a = a + 3
a +=3
(七)条件运算符
条件运算符(:)是C语言中唯一的一个三目运算符看,它是对第一个表达式作真/假检测,然后根据结果返回另外两个表达式中的一个。
(八)逗号运算符
在C语言中,多个表达式可以用逗号分开,其中用逗号分开的表达式的值分别结算,但整个表达式的值是最后一个表达式的值。
(九)优先级和结合性
优先级和结合性是运算符的两个重要的特性,结合性又称为计算顺序,它决定组成表达式的各个部分是否参与计算以及什么时候计算。
优先级 |
运算符 |
名称或含义 |
使用形式 |
结合方向 |
说明 |
1 |
[] |
数组下标 |
数组名[常量表达式] |
左到右 |
-- |
() |
圆括号 |
(表达式)/函数名(形参表) |
-- |
||
. |
成员选择(对象) |
对象.成员名 |
-- |
||
-> |
成员选择(指针) |
对象指针->成员名 |
-- |
||
|
|||||
2 |
- |
负号运算符 |
-表达式 |
右到左 |
单目运算符 |
~ |
按位取反运算符 |
~表达式 |
|||
++ |
自增运算符 |
++变量名/变量名++ |
|||
-- |
自减运算符 |
--变量名/变量名-- |
|||
* |
取值运算符 |
*指针变量 |
|||
& |
取地址运算符 |
&变量名 |
|||
! |
逻辑非运算符 |
!表达式 |
|||
(类型) |
强制类型转换 |
(数据类型)表达式 |
-- |
||
sizeof |
长度运算符 |
sizeof(表达式) |
-- |
||
|
|||||
3 |
/ |
除 |
表达式/表达式 |
左到右 |
双目运算符 |
* |
乘 |
表达式*表达式 |
|||
% |
余数(取模) |
整型表达式%整型表达式 |
|||
4 |
+ |
加 |
表达式+表达式 |
左到右 |
双目运算符 |
- |
减 |
表达式-表达式 |
|||
5 |
<< |
左移 |
变量<<表达式 |
左到右 |
双目运算符 |
>> |
右移 |
变量>>表达式 |
|||
|
|||||
6 |
> |
大于 |
表达式>表达式 |
左到右 |
双目运算符 |
>= |
大于等于 |
表达式>=表达式 |
|||
< |
小于 |
表达式<表达式 |
|||
<= |
小于等于 |
表达式<=表达式 |
|||
7 |
== |
等于 |
表达式==表达式 |
左到右 |
双目运算符 |
!= |
不等于 |
表达式!= 表达式 |
|||
|
|||||
8 |
& |
按位与 |
表达式&表达式 |
左到右 |
双目运算符 |
9 |
^ |
按位异或 |
表达式^表达式 |
左到右 |
双目运算符 |
10 |
| |
按位或 |
表达式|表达式 |
左到右 |
双目运算符 |
11 |
&& |
逻辑与 |
表达式&&表达式 |
左到右 |
双目运算符 |
12 |
|| |
逻辑或 |
表达式||表达式 |
左到右 |
双目运算符 |
|
|||||
13 |
?: |
条件运算符 |
表达式1? 表达式2: 表达式3 |
右到左 |
三目运算符 |
|
|||||
14 |
= |
赋值运算符 |
变量=表达式 |
右到左 |
-- |
/= |
除后赋值 |
变量/=表达式 |
-- |
||
*= |
乘后赋值 |
变量*=表达式 |
-- |
||
%= |
取模后赋值 |
变量%=表达式 |
-- |
||
+= |
加后赋值 |
变量+=表达式 |
-- |
||
-= |
减后赋值 |
变量-=表达式 |
-- |
||
<<= |
左移后赋值 |
变量<<=表达式 |
-- |
||
>>= |
右移后赋值 |
变量>>=表达式 |
-- |
||
&= |
按位与后赋值 |
变量&=表达式 |
-- |
||
^= |
按位异或后赋值 |
变量^=表达式 |
-- |
||
|= |
按位或后赋值 |
变量|=表达式 |
-- |
||
|
|||||
15 |
, |
逗号运算符 |
表达式,表达式,… |
左到右 |
-- |
参考:
https://blog.csdn.net/huangblog/article/details/8271791