(译)你必须知道的位运算技巧 Low Level Bit Hacks You Absolutely Must Know

from HackerMonthly-issue15
By Peteris Krumins

 

我准备写一篇关于嵌入系统开发者所熟知的有关位运算技巧的文章. 位运算技巧可以巧妙有效的操作整数.在如计算一个整数中包含多少个1之类的操作时,这些技巧可以只用几个位操作符搞定.

假定你已具备2的补码和位运算操作的知识.

下面的文章将使用以下简写:

& -  and
| -  or
^ -  xor
~ -  not
<< -  左移
>> -  右移

本文里的整数指 8bit (虽然也适用于任意长度的有符号整数) 的有符号整数,我们用 x 表示,结果用 y 表示, x 的每个bit 有 b7,b6,b5,b4,b3,b2,b1 和 b0,符号位 b7 为最高位,b0为最低位.

我将从最常用的技巧开始,然后渐渐趋于更难的技巧.并使用示例代码解释每个技巧的工作原理.

 

位运算技巧1: 判断一个整数奇偶

if ((x & 1) == 0) {
  x is even
}
else {
  x is odd
}

我相信所有人都见过这个,它的原理是判断最后一个bit b0如果是1的话就是奇数. 用1 and x 将消除除b0以外的位,那么如果结果为0 x即为偶数,否则x 为奇数.

来看些例子,比如43,是一个奇数,用二制表示即 00101011. 它的最后