2015年6月8日星期一

Bit Manipulation 位运算

位操作符:
OR (|)AND (&)XOR (^)Left Shift (<<)Right Shift (>>)Not (~)
1|0=11&0=01^0=10010<<2=10001100>>2=0011~1=0
1. a ^ a = 0
2. a ^ b = b ^ a

按位或(OR)

按位或处理两个长度相同的二进制数,两个相应的二进位中只要有一个为1,该位的结果值为1。例如
        0101(十进制5)
     OR 0011(十进制3)
      = 0111(十进制7)

按位异或(XOR)

按位异或运算,对等长二进制模式按位或二进制数的每一位执行逻辑异按位或操作。操作的结果是如果某位不同则该位为1,否则该位为0。例如
         0101
     XOR 0011
       = 0110

按位与(AND)[编辑]

按位与处理两个长度相同的二进制数,两个相应的二进位都为1,该位的结果值才为1,否则为0。例如:
         0101
     AND 0011
       = 0001
常用方法:

  • 1. n & (n-1)能够消 除n中最右侧的一个1。
  • 2. 左移 << 右移>>
  • 3. (a >> x) & 1 或者 a & (1 << x) 判断a的x位是否为0
  • 4. num | (1 << i) 把num的第i位置为1

没有评论:

发表评论