(一)位运算:&、|、^、~
常用的位运算符有&(按位与)、|(按位或)、^(按位异或)、~(按位取反)。
位运算把所需要运算的信息看作是二进制组成的信息,按位执行相应的功能后得到相应的结果。
常用位运算符有&(按位与)、|(按位或)、^(按位异或)、~(按位取反)。
其中,按位取反运算符是单目运算符,其余均为双目运算符。
位运算符的优先级(从高到低):~、&、^、|【其中~(取反)的结合方向自右至左,且优先级高于算术运算符,其余运算符的结合方向都是自左至右,且优先级低于关系运算符】
一:位运算符:
1:按位相与(&)
解析:运算法则:0 & 0 = 0, 0 & 1 = 0, 1 & 0 = 0, 1 & 1 = 1。
总结:即同时为1的位结果为1,否则结果为0。
例子:如 2 = 0X01 ,9 = 0X1001 ,两者按位相与即为:
0X0001
& 0X1001
= 0X0001
深度剖析:按位与运算有两种常用的用法,一是取一个信息的某几位(取位),如截取X的最低七位:X & 0X7F。二是让一 个信息保留指定的位数,其余置0(保留位),如让X信息只保留最低6位:X = X & 0X3F。以上的用法都是要事先设置这个常量,该常量只要所需要的位是1,其余为0即可。
总结作用:清零,取位。
2:按位相或(|)
解析:运算法则: 0 | 0 = 0, 0 | 1 = 1, 1 | 0 = 1, 1 | 1 = 1。
总结:即只要有1个是1的位,结果为1,否则为0。
例子:如 3 = 0X11 ,5 = 0X0101 ,两者按位相或即为:
0X0011
| 0X0101
= 0X0111
深度剖析:按位或运算有一种常用的用法,即将一个信息的某几位置成1。如想要要将X的后三位置成1并且返回保存给X: X = X |0X07。
总结作用:置1。
3:按位取反(~)
解析:运算法则:~1 = 0 , 0~ = 1 。
总结:1取反位0,0取反为1。
例子:如解析。
深度剖析:无。
总结作用:取反。
4:按位异或(^)
解析:运算法则: 0 ^ 0 = 0, 0 ^ 1 = 1, 1 ^ 0 = 1, 1 ^ 1 = 0
总结:相应位值相同为0,不同为1。
例子:如 、5 = 0X0101 , 8 = 0X1000 ,两者按位异或可得:
0X0101
^ 0X1000
= 0X1101
深度剖析:按位异或运算的意思是求两个运算分量相应位值是否相异,相异的为1,相同的为0。按位异或运算的典型用法是求一个信息的某几位信息的反。如欲求整型变量X的最右4位信息的反,用逻辑异或运算就能求得j最右4位的信息的反,即原来为1的位,结果是0,原来为0的位,结果是1.
总结作用:求指定位信息的反。
(二)非位运算:<<、<<<、>>、>>>、||、&&
这是在单片机及其类似的平台开发用的最多的一些运算符,该类运算符有&&(并且)、||(或者)、<<(左移)、>>(右移)、<<<(算术左移)、>>>(算术右移)
优先级 | 运算符 | 名称或含义 | 使用形式 | 结合方向 | 说明 |
1类 | [] | 数组下标 | 数组名[常量表达式] | 从左到右 | -- |
() | 圆括号 | (表达式)/函数名(形参表) | -- | ||
. | 成员选择(对象) | 对象.成员名 | -- | ||
-> | 成员选择(指针) | 对象指针->成员名 | -- | ||
| |||||
2类 | - | 负号运算符 | -表达式 | 从右到左 | 单目运算符 |
~ | 按位取反运算符 | ~表达式 | |||
++ | 自增运算符 | ++变量名/变量名++ | |||
-- | 自减运算符 | --变量名/变量名-- | |||
* | 取值运算符 | *指针变量 | |||
& | 取地址运算符 | &变量名 | |||
! | 逻辑非运算符 | !表达式 | |||
(类型) | 强制类型转换 | (数据类型)表达式 | -- | ||
sizeof | 长度运算符 | sizeof(表达式) | -- | ||
| |||||
3类 | / | 除 | 表达式/表达式 | 从左到右 | 双目运算符 |
* | 乘 | 表达式*表达式 | |||
% | 余数(取模) | 整型表达式%整型表达式 | |||
4类 | + | 加 | 表达式+表达式 | 从左到右 | 双目运算符 |
- | 减 | 表达式-表达式 | |||
5类 | << | 左移 | 变量<<表达式 | 从左到右 | 双目运算符 |
>> | 右移 | 变量>>表达式 | |||
| |||||
6类 | > | 大于 | 表达式>表达式 | 从左到右 | 双目运算符 |
>= | 大于等于 | 表达式>=表达式 | |||
< | 小于 | 表达式<表达式 | |||
<= | 小于等于 | 表达式<=表达式 | |||
7类 | == | 等于 | 表达式==表达式 | 从左到右 | 双目运算符 |
!= | 不等于 | 表达式!= 表达式 | |||
| |||||
8类 | & | 按位与 | 表达式&表达式 | 从左到右 | 双目运算符 |
9类 | ^ | 按位异或 | 表达式^表达式 | 从左到右 | 双目运算符 |
10类 | | | 按位或 | 表达式|表达式 | 从左到右 | 双目运算符 |
11类 | && | 逻辑与 | 表达式&&表达式 | 从左到右 | 双目运算符 |
12类 | || | 逻辑或 | 表达式||表达式 | 从左到右 | 双目运算符 |
| |||||
13类 | ?: | 条件运算符 | 表达式1? 表达式2: 表达式3 | 从右到左 | 三目运算符 |
| |||||
14类 | = | 赋值运算符 | 变量=表达式 | 从右到左 | -- |
/= | 除后赋值 | 变量/=表达式 | -- | ||
*= | 乘后赋值 | 变量*=表达式 | -- | ||
%= | 取模后赋值 | 变量%=表达式 | -- | ||
+= | 加后赋值 | 变量+=表达式 | -- | ||
-= | 减后赋值 | 变量-=表达式 | -- | ||
<<= | 左移后赋值 | 变量<<=表达式 | -- | ||
>>= | 右移后赋值 | 变量>>=表达式 | -- | ||
&= | 按位与后赋值 | 变量&=表达式 | -- | ||
^= | 按位异或后赋值 | 变量^=表达式 | -- | ||
|= | 按位或后赋值 | 变量|=表达式 | -- | ||
| |||||
15类 | , | 逗号运算符 | 表达式,表达式,… | 从左到右 | -- |