目录

一、概念

二、单目运算符

2.1 负号运算符

2.2 自增自减运算符

2.3 取值、取地址运算符

2.4 逻辑运算符(单目)

2.5 位运算符(单目)

2.6长度运算符

三、双目运算符

3.1 算数运算符

3.2 关系运算符

3.2 位运算符(双目)

3.3 逻辑运算符(双目)

四、三目运算符

五、赋值运算符/复合运算符

六、逗号运算符

七、运算符优先级表


一、概念

所谓运算符,就是一个符号。是用来连接多个表达式从而进行运算。

表达式,就是由运算符、运算量、标点符号等组成的一个有效序列,是用来说明运算过程的。

二、单目运算符

单目运算符只对一个操作数进行逻辑运算。

2.1 负号运算符

格式:-表达式

2.2 自增自减运算符

++

格式:++变量名/变量名++

格式:–变量名/变量名–

注意:

++操作数(–操作数) 是先在操作数本身+1(或-1),然后再取操作数的值

操作数++(操作数–)是先取操作数本身的值 , 然后操作数本身+1(或-1)

2.3 取值、取地址运算符

取值*

格式:*指针变量

取地址 &

格式:&变量名

2.4 逻辑运算符(单目)

逻辑运算符是用来连接多个由关系运算符组成的表达式的,所以逻辑运算符的表达式的结果也是一个bool类型。

逻辑非

真变假 假变真

格式:!表达式

2.5 位运算符(单目)

位运算符都是针对二进制而言的,位指的是bit位,不管几进制数,只要做位运算,都会转换成二进制数参与运算。

~

表示按位取反,按位运算 1变0 0变1

格式:~表达式

2.6长度运算符

sizeof

以字节为单位计算变量或类型的大小。

格式:sizeof(表达式)

注意:

sizeof的用法和函数调用特别像,但是sizeof是C语言关键字,不是函数调用。

sizeof返回值的计算结果

32位系统 返回值是int类型的 需要用%d打印

64位系统 返回值是long类型的 需要用%ld打印

三、双目运算符

双目运算符只对两个操作数进行逻辑运算。

3.1 算数运算符

/ *模除 % +

格式:表达式 运算符 表达式

注意:

模除符号两边的表达式必须是整型 eg: 10%3 == 1(余数为1)

C语言中进行算术运算要求左右两边的操作数数据类型一致。

eg:整形 与 浮点数类型 进行运算,整形先变为double类型,再参与运算。

3.2 关系运算符

关系运算符表达式的结果是一个bool类型,非0为真 0为假

大于 > 大于等于 >= 小于 <小于等于 <= 等于 == 不等于 !=

格式:表达式 运算符 表达式

注意:

要区分 == 和 = 的区别

== 是关系运算符

= 是赋值运算符

3.2 位运算符(双目)

位运算符都是针对二进制而言的,位指的是bit位,不管几进制数,只要做位运算,都会转换成二进制数参与运算。

按位与 &

按位运算,全1为1 有0为0

按位异或 ^

按位运算, 不同为1 相同为0

按位或|

按位运算,有1为1 全0为0

按位左移 <<

按位运算,整个数据向左移动,舍弃高位,低位补0

按位右移 >>

按位运算,整个数据向右移动,舍弃低位。高位补0

格式:表达式 运算符 表达式

注意:

一般情况下,但凡涉及到位运算,使用的都是无符号数。

如果是有符号数,换可能涉及符号位的处理以及原码、反码、补码转换的问题。

一般多用于硬件设备的控制和标志位的控制等。

3.3 逻辑运算符(双目)

逻辑运算符是用来连接多个由关系运算符组成的表达式的,所以逻辑运算符的表达式的结果也是一个bool类型。

逻辑与 &&

逻辑与连接多个表达式,如果全为真,整个表达式的结果才为真,

有一个表达式为假,整个表达式的结为假。

逻辑或 ||

逻辑或连接多个表达式。如果有一个为真,整个表达式的结果就为真,

所有表达式为假,整个表达式的结果为假。

格式:表达式 运算符 表达式

逻辑运算符的短路原则:

逻辑与连接的多个表达式,遇到某个表达式为假了,后面的表达式就都不执行了。

逻辑或连接的多个表达式,遇到某个表达式为真了,后面的表达式就都不执行了。

四、三目运算符

条件运算符 ?:

C语言中唯一的一个三目运算符。

格式:表达式1 ? 表达式2 : 表达式3

先执行表达式1,如果表达式1为真,则执行表达式2,否则执行表达式3。

执行逻辑与 if…else 语句很像

五、赋值运算符/复合运算符

赋值运算符 =

除后赋值 /= 乘后赋值 *=取模后赋值 %=加后赋值 += 减后赋值 -=

左移后赋值 <<= 右移后赋值 >>= 按位与后赋值 &= 按位异或后赋值 ^= 按位或后赋值 |=

格式:变量 运算符 表达式

eg:

int a = 10;int b = 20;a += a*b;//a的值为210 ==> a = a + (a*b)

六、逗号运算符

,

格式:(表达式1,表达式2,表达式3…)

从左到右依次运算,最后一次表达式的结果就是整个逗号运算符表达式的结果。

注意:

如果不加括号,就不是逗号运算符了,执行的结果不一样。

eg:

int a = 10;int b = 20;int c = 30;int ret = (++a,++b,++c);//ret的值为31(++c)int ret2 = ++a,++b,++c;//ret2的值为11(++a)

七、运算符优先级表

注:

同一优先级的运算符,运算顺序由优先方向决定。

常用的运算符优先级顺口溜 “单算移关与,异或逻条赋”