目录
一、概念
所谓运算符,就是一个符号。是用来连接多个表达式从而进行运算。
表达式,就是由运算符、运算量、标点符号等组成的一个有效序列,是用来说明运算过程的。
二、单目运算符
单目运算符只对一个操作数进行逻辑运算。
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)
七、运算符优先级表
注:
同一优先级的运算符,运算顺序由优先方向决定。
常用的运算符优先级顺口溜 “单算移关与,异或逻条赋”