這裡的位反轉(bit reversal),指的是乙個數的所有bit位依照中點對換位置,例如0b0101 0111 => 0b1110 1010。也可以叫二進位制逆序,按位逆序,位翻轉等等。
該演算法用於將8bit數進行位反轉。演算法用到了64bit乘法運算。演算法通過4次運算完成位反轉操作。與通過3次運算完成位反轉操作演算法相比,沒有了取模運算。
unsigned
char
reverse
(unsigned
char x)
devised by sean anderson, july 13, 2001.
bit twiddling hacks
用abcdefgh表示乙個8bit數的8個bit位。
計算分為四個步驟
1.x * 0x80200802ull
x乘以0x80200802ull
步驟一的結果和0x0884422110ull進行與操作
步驟二的結果乘以0x0101010101ull
步驟三的結果右移32位
最後完成從abcdefgh到hgfedcba的位反轉操作。
可以使用該位反轉演算法實現32位數的位反轉。
**如下:
unsigned
char
reverse
(unsigned
char x)
unsigned
intreverse_32
(unsigned
int x)
bit twiddling hacks by sean eron anderson
位反轉演算法 通過3次運算完成
位操作筆記 位計數演算法 查表法 8位數
演算法 演算法計算過程 拓展 參考資料 位計數 counting bits set 指的是計算乙個數里bit位置1的個數,例如乙個8位數0xea 0b1110 1010,位置1的個數為5。該演算法通過查表的方式來計算乙個數里bit位置1的個數。由於8bit數最多只有256個,也就是最多只有256種情...
位操作筆記 交換數值 使用異或
交換數值指的是,兩個數的數值交換,例如x 1,y 2,交換之後變成x 2,y 1。通過異或來實現交換數值。define swap a,b a b b a a b 上述方法,如果a和b在記憶體中的同一位置,會不起作用,導致數值變為0。如果可能出現a和b在記憶體中的同一位置,那麼可以加入 a b 進行判...
位操作筆記 判斷兩個整數的符號位是否相反
判斷兩個整數的符號位是否相反,也就是兩個數是否乙個是正數,乙個是負數。該演算法通過異或的結果大小來判斷兩個整數的符號位是否相反。bool detect opposite signs int x,int y 第一步,x y,兩個整數先進行異或。第二步,判斷異或的結果是否小於0,如果兩個整數的符號位相反...