位操作筆記 位反轉演算法 通過4次運算完成

2021-10-10 01:39:58 字數 1391 閱讀 6437

這裡的位反轉(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,如果兩個整數的符號位相反...