设为首页 加入收藏

TOP

2.5.6 位运算符和位运算表达式
2013-11-12 22:31:15 来源: 作者: 【 】 浏览:124
Tags:2.5.6位 运算 符和位 表达式

2.5.6  位运算符和位运算表达式

位运算符用于对二进制数值的位进行运算,共有6个运算符,如表2-13所示。

表2-13  位运算符

   

   

   

~

~a

按位求反

<< 

a<<2

左移

>> 

a>>2

右移

&

a&b

按位与

^

a^b

按位异或

|

a^b

按位或

说明:

(1) 参与位操作的操作符必须是整型数据或字符型数据。虽然它们可以是signed或unsigned,但建议使用unsigned类型。因为符号位在不同的位运算符中的处理方法不一样,同时又受到机器型号的影响程序在不同条件下的执行结果也不同。所以使用unsigned类型有助于提高程序的正确性。

(2) 位运算符的优先级:~最高,>>、<<次之,&、|、^最低。

(3) 位运算符的结合方向:除了~运算符是由右至左外,其他运算符都是由左至右。

1. 按位求反

求反运算符~为单目运算符,具有右结合性,其功能是对参与运算的数的各二进制位按位求反,即将原来为1的位变为0,原来为0的位变为1。例如,~9的运算为:~(0000000000001001)结果为:1111111111110110

2. 按位与

运算符&将其两个操作数对应位逐一地进行逻辑与运算。两个一位二进制数逻辑与运算的规则为"见零即零",即两个数中只要有一个为0,则其逻辑与的结果就为0。参与运算的数以补码方式出现。

例如:有两个八进制数a=255、b=233,将这两个字符型数据进行按位与运算。

因为a=010101101    b=011001011

所以a&b=010001001

按位与运算通常用来对某些位清0,另一些位保持不变。例如,把a的高八位清0,保留低八位,可作a&255运算(255的二进制数为0000000011111111)。

3. 按位或

运算符|将其两个操作数对应位逐一地进行逻辑或运算。两个一位二进制数逻辑或运算的规则为"见壹则壹",即两个数中只要有一个为1,则其逻辑或的结果就为1。参与运算的两个数均以补码出现。

例如:有两个十六进制数a=10,b=34,则a|b的运算结果为:00110100

因为a=00010000  b=00110100

所以a|b=00110100

按位或运算通常用来对某些位置1,另一些位保持不变。例如,把a的低八位置1,保留高八位,可作a|255运算(255的二进制数为0000000011111111)。

4. 按位异或

运算符^将其两个操作数对应位逐一地进行逻辑异或运算。两个一位二进制数逻辑异或的规则为"同则零,异则壹"。即两个数只要不同,则其逻辑异或的结果就为1;否则为0。参与运算数仍以补码出现。

例如:有两个十六进制数a=10、b=35,则a^b的运算结果为:00100101

因为a=00010000   b=00110101

所以a^b=00100101

5. 左移

左移运算符<<是双目运算符,其功能把左边的运算数的各二进制位全部左移若干位,由右边的数指定移动的位数,高位丢弃,低位补0。由于移位运算符的右操作数表示的是欲移动的位数,所以,其必须是一个整型表达式。

例如:有一个十六进制数a=85。

  1. a=10000101 
  2. a<<22=00010100 

在对整数操作中,左移1位相当于乘2,左移2位相当于乘4,一般来说,将一个数左移n位,就相当于将该数乘以2n。所以在程序中,常用左移位来进行快速的乘法运算。但有一点注意:以上结论只是在左移不出现溢出时才是正确的。

6. 右移

右移运算符>>是双目运算符,其功能是把左边的运算数的各二进制位全部右移若干位,右边的数指定移动的位数。

(1) 对无符号的int或char型数据来说,右移时左端补0。如下所示:
 

  1. a=1000101 
  2. a>>2=00100001 

(2) 对带符号的int和char型数据,空出的位补符号位。

与左移操作相对应,将一个数右移n位,相当于将该数除以2n,其小数部分将被忽略。
 

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇2.5.5 逻辑运算符和逻辑表达式 下一篇2.5.7 逗号运算符和逗号表达式

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: