这里的位反转(Bit Reversal),指的是一个数的所有bit位依照中点对换位置,例如0b0101 0111 => 0b1110 1010。也可以叫二进制逆序,按位逆序,位翻转等等。
该算法用于任意位数的位反转。
Bit Twiddling Hacks
用abcdefgh表示一个8bit数的8个bit位。
计算过程如下
r = v : r = abcdefgh s = sizeof(v) * 8 - 1 : s = 7 v >>= 1 : v = 0abcdefg r <<= 1 : r = bcdefghg s-- : s = 6 v >>= 1 : v = 00abcdef r <<= 1 : r = cdefghgf s-- : s = 5 v >>= 1 : v = 000abcde r <<= 1 : r = defghgfe s-- : s = 4 …… …… …… v >>= 1 : v = 0000000a r <<= 1 : r = hgfedcba s-- : s = 0 v >>= 1 : v = 00000000 r <<= s : r = hgfedcba最后完成abcdefgh => hgfedcba的位反转操作
假设中途v为0的时候,跳出循环r <<= s 例如这个八位数为0000efgh,此时
v >>= 1 : v = 0000000e r <<= 1 : r = 0efghgfe s-- : s = 4 v >>= 1 : v = 00000000 r <<= s : r = hgfe0000完成0000efgh => hgfe0000的位反转操作。
Bit Twiddling Hacks By Sean Eron Anderson
[Hacker’s Delight] 作者: Henry S. Warren Jr.