位运算符的用法及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

逗号运算符

表达式,表达式,…

左到右

--