基本算法——位运算【算法进阶指南】

  算数位运算

    在现代架构中,位运算速度与加法运算相同,快于乘法运算。

    一、位运算符

      (1)取反【NOT】

          二进制数每一位取反,0变1,1变0

          操作符‘~’      NOT 0111 = 1000

      (2)按位或【OR】

          处理长度相同的二进制数,有1为1

          操作符‘|’      0101 OR 0011 = 0111

      (3)按位异或【XOR】

          不同为1,相同为0

          操作符‘^’      0101 XOR 0011 = 0110

          ex:当n为偶数时,n ^ 1 = n + 1;当n为奇数时,n ^ 1 = n - 1

             so,“0与1” “2与3” “4与5”…关于xor 1运算构成“成对变换”,可用于边的存储

      (4)按位与【AND】

          两1为1,否则为0

          操作符‘&’      0101 AND 0011 = 0001

          ex:可以用来判断一个数的奇偶(if(b&1))

                  如果一个数是奇数,二进制数最低位一定为1,偶数最低位为0

      运算符优先级

              加减—>移位—>比较大小—>位与—>异或—>位或

                +,-       <<,>>     >,<,==,!=         &            ^             |

     二、移位

      将二进制数中的每一位全部朝一个方向移动,溢出部分被舍弃,空缺部分填入一定值【0】。

      左移‘<<’      0001(十进制1)<< 3 = 1000(十进制8)

          1<<n = 2^n        n<<1 = 2n

      右移‘>>’      1010(十进制10)>> 2 = 0010(十进制2)

          n>>1 = n/2 (向下取整)  

  二进制状态压缩

          是将长度为m的bool数组用一个m位二进制整数表示并存储。

                                 操作                                                         实现

      取出整数n在二进制表示下的第k位                            (n>>k)&1

      取出整数n在二进制表示下的第0~k-1位(后k位)       n&((1<<k)-1)

      把整数n在二进制表示下的第k位取反                        n^(1<<k)

      对整数n在二进制表示下的第k位赋值为1                  n|(1<<k)

      对整数n在二进制表示下的第k位赋值为0                  n&(~(1<<k))

  lowbit 运算

    lowbit(n)为非负整数n在二进制表示下“最低位的1及其后边所有的0”构成的数值。ex:n=10 ==> 1010,则lowbit(10)=2

                            lowbit(n) = n&(~n+1) = n&(-n)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值