位运算符的用法及C语言运算符优先级解析
来源:互联网 发布:淘宝店铺动态怎么写 编辑:程序博客网 时间:2024/06/14 09:21
(一)位运算:&、|、^、~
常用的位运算符有&(按位与)、|(按位或)、^(按位异或)、~(按位取反)。
位运算把所需要运算的信息看作是二进制组成的信息,按位执行相应的功能后得到相应的结果。
常用位运算符有&(按位与)、|(按位或)、^(按位异或)、~(按位取反)。
其中,按位取反运算符是单目运算符,其余均为双目运算符。
位运算符的优先级(从高到低):~、&、^、|【其中~(取反)的结合方向自右至左,且优先级高于算术运算符,其余运算符的结合方向都是自左至右,且优先级低于关系运算符】
一:位运算符:
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类
,
逗号运算符
表达式,表达式,…
从左到右
--
- 位运算符的用法及C语言运算符优先级解析
- C语言运算符及优先级
- C语言运算符及优先级
- C语言位运算符及常见用法
- c语言——位运算符及用法
- C语言运算符的“优先级口诀”
- C语言运算符的优先级表
- C语言运算符优先级的疑惑
- c语言中的运算符的优先级
- 【转】C语言运算符的优先级
- c语言运算符的优先级
- c语言中运算符的优先级
- c语言运算符的优先级问题
- c语言运算符的优先级
- C语言的运算符优先级
- c语言的运算符及其优先级
- C语言运算符的优先级
- C语言运算符的优先级
- QT编写的程序从Windows操作系统中移植到树莓派中编译并运行
- 多态
- 【Intellij IDEA】eclipse项目导入 【转】
- tf.get_variable中变量的重复利用,reuse关键字
- 小人物也需要有梦想
- 位运算符的用法及C语言运算符优先级解析
- EventBus:Could not dispatch event: class to subscribing class
- Machine Learning第九讲[异常检测] --(二)创建一个异常检测系统
- ContentProvider获取手机联系人
- Java中的DatagramPacket与DatagramSocket的初步
- bzoj 2631 tree
- UESTC 1586 可以说是非常豹笑了 2-SAT+并查集
- Acach缓存的实现
- BM、GC、SGBM三种算法的比较和BM在OpenCV3下的参数设置