位操作筆記 位計數演算法 查表法 8位數

2021-10-24 20:58:59 字數 899 閱讀 9349

演算法**

演算法計算過程

拓展[參考資料]

位計數(counting bits set),指的是計算乙個數里bit位置1的個數,例如乙個8位數0xea = 0b1110 1010,位置1的個數為5。

該演算法通過查表的方式來計算乙個數里bit位置1的個數。由於8bit數最多只有256個,也就是最多只有256種情況,所以直接通過建表的方式,將這256種情況全部列出來。使用查表法進行位計數的速度最快。

static

const

unsigned

char bitssettable256=

;unsigned

char

count

(unsigned

char v)

bit twiddling hacks

直接查表得到結果。

可以使用該位計數演算法實現32位數的位計數演算法。

**如下:

static

const

unsigned

char bitssettable256=

;unsigned

intcount

(unsigned

int v)

將乙個32位數分成4個8位數,進行4次查表,然後相加,得到32位數裡的bit位置1的個數。

使用查表法就需要生成表,可以使用如下方法生成表:

static

unsigned

char bitssettable256[

256]

;void

table

(void

)}

bit twiddling hacks

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

這裡的位反轉 bit reversal 指的是乙個數的所有bit位依照中點對換位置,例如0b0101 0111 0b1110 1010。也可以叫二進位制逆序,按位逆序,位翻轉等等。該演算法用於將8bit數進行位反轉。演算法用到了64bit乘法運算。演算法通過4次運算完成位反轉操作。與通過3次運算完成...

演算法 位元位計數

338.位元位計數 給定乙個非負整數 num。對於 0 i num 範圍中的每個數字 i 計算其二進位制數中的 1 的數目並將它們作為陣列返回。示例 1 輸入 2 輸出 0,1,1 示例 2 輸入 5 輸出 0,1,1,2,1,2 高階 要求演算法的空間複雜度為o n 你能進一步完善解法嗎?要求在c...

位操作型動態規劃 位元位計數

給定乙個非負整數 num。對於 0 i num 範圍中的每個數字 i 計算其二進位制數中的 1 的數目並將它們作為陣列返回。示例 1 輸入 2 輸出 0,1,1 從題目中的二進位制數能夠比較明顯的看出該題目屬於位操作型動態規劃,同時屬於計數型的動態規劃 這個的最後一步應該很好理解,就是它的最後一位二...