(一)位运算:&、|、^、~
常用的位运算符有&(按位与)、|(按位或)、^(按位异或)、~(按位取反)。
位运算把所需要运算的信息看作是二进制组成的信息,按位执行相应的功能后得到相应的结果。
常用位运算符有&(按位与)、|(按位或)、^(按位异或)、~(按位取反)。
其中,按位取反运算符是单目运算符,其余均为双目运算符。
位运算符的优先级(从高到低):~、&、^、|【其中~(取反)的结合方向自右至左,且优先级高于算术运算符,其余运算符的结合方向都是自左至右,且优先级低于关系运算符】
一:位运算符:
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类 |
, |
逗号运算符 |
表达式,表达式,… |
从左到右 |
-- |