C语言位运算符的使用

 一、按位与运算符&
参与运算的两个量按照对应的位进行与运算,且
0&0→0,  0&1→0,  1&0→0,  1&1→1

利用按位与运算,我们可以方便地实现清零或取一个数的某些位。
例如 取出a的低4位,将b的低4位清零。
0x0F&a 取出a的低4位
0xF0&b 将b的低4位清零
这种方法称为“屏蔽方法”,其中0x0F、0xF0称为屏蔽字。

二、按位或运算符|
参与运算的两个量按照对应位进行或运算,且
0|0→0,  0|1→1,  1|0→1,  1|1→1

利用按位或运算,我们可以方便地实现置位或组合新值。


例如 将整数i(2字节)的低字节全置为1。
0xff|i
例如 将整数a的低字节和整数b的高字节组成一个新值。
先取出a的低字节:0xff&a (或0x00ff&a)
再取出b的高字节:0xff00&b
然后组成新值:  0xff&a|0xff00&b

三、按位异或运算符^
参与运算的两个量按照对应的位进行异或运算,且
0^0→0,  0^1→1,  1^0→1,  1^1→0

此外,一个数与0异或仍保持不变,即a^0=a
一个数与自己异或结果为0,即a^a=0

四、按位取反运算符~
这是位运算符中唯一的单目运算符,即将数的每一位取反(0→1,1→0)。


例如 将整数a的最低位清零
0xfffe&a
对于有的大中型计算机,整型占4个字节,如将上式直接挪用过去,则将丢失a的两个高字节,必须改为
0xfffffffe&a
因此程序通用性降低。若改为下面形式则通用:
~1&a

五、左移运算符<<
将一个数的各二进制位全部左移若干位。左移后右边补入0,左边移出的位舍弃。


例如 若a=3,则b=a<<1,b为6
  c=b<<1,c为12
即左移一位相当于乘以2。用这种方式实现乘法运算比其它方式快得多,但只适用于左边没有1被移出的情况。例如
a=0x83,则a<<1 结果为6

六、右移运算符>>
将一个数的各二进制位全部右移若干位。右移后,右边移出的位被舍弃,左边补入的位分两种情况:
(1) 对无符号数,左边补入0
(2) 对有符号数,若符号位为0(正数)则补入0;若符号位为1(负数)则补入1。

本篇文章来源于 黑客基地-全球最大的中文黑客站 原文链接:http://www.hackbase.com/tech/2009-02-02/44960.html

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值