位运算

11=0000 1011

13=0000 1101

一、常见的位运算

1、~ 按位取反   ~11=1111 0100(不分正负数)

2、&按位与    11&13=0000 1001

3、^按位异或  11^13=0000 0110

4、|按位或       11|13=0000 1111

5、>>按位右移    11>>1= 00000 101    5=11/2

6、<<按位左移    11<<1=000 10110     22=11*2

<<(标准规定在右边补0), >>(正数则左边补0,负数标准没有规定在左边补充的数字,分为逻辑右移和算术右移,具体由编译器决定,windows平台和gcc采取算术右移即负数补1)

二、常见的二进制位的变换操作

方法:1、确定运算符   2、确定数字   3、构造数字
下面列举了一些常见的二进制位的变换操作。
功能 | 示例 | 位运算
----------------------+---------------------------+--------------------
去掉最后一位 | (101101->10110) |                                  x >> 1
在最后加一个0 | (101101->1011010) |                            x << 1
在最后加一个1 | (101101->1011011) |                            (x << 1)|1
把最后一位变成1 | (101100->101101) |                          x | 1
把最后一位变成0 | (101101->101100) |                          (x | 1)-1或者最后一位取反   x ^ 1
把右数第k位变成1 | (101001->101101,k=3) |                 x | (1 << (k-1))
把右数第k位变成0 | (101101->101001,k=3) |                 x & ~(1 << (k-1))
右数第k位取反 | (101001->101101,k=3) |                       x ^ (1 << (k-1))
取末三位 | (1101101->101) |                                           x & 7
取末k位 | (1101101->1101,k=4) |                                    x & ((1 << k)-1)
取右数第k位 | (1101101->1,k=4) |                                   (x >> (k-1)) & 1
把右边连续的1变成0 | (100101111->100100000) |         x & (x+1)
把右起第一个0变成1 | (100101111->100111111) |         x | (x+1)
把右边连续的0变成1 | (11011000->11011111) |             x | (x-1)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值