如何計算某char變數bit位為1的總數目?

2021-04-30 01:34:05 字數 775 閱讀 4794

如何計算某char變數bit位為1的總數目?

比如:char c = 'a';

而'a'二進位制是01100001,所以起bit位為1的總數目是3。

請問這個如何實現?謝謝。

據說還可以有空間優化和時間優化等不同實現?

-------------egust (就像矗立在彩虹之巔)-------------

比起x = (x & 0x55) + ((x >> 1) & 0x55);

x = (x & 0x33) + ((x >> 2) & 0x33);

x = (x & 0x0f) + ((x >> 4) & 0x0f);

來,應該也不會慢吧,這個畢竟要進行15次以上的運算,雖然都是在暫存器里弄

查表只要一條指令就夠了,就算沒有cache上應該不會慢這麼多吧,而且多次訪問的話應該更快才對

x86好像也沒有直接數的指令

-------------vonneumann (沉默的大多數)-------------

如果只是偶爾呼叫一次,應該 egust 那個更快吧。如果頻繁呼叫,估計查表快。我猜的。

原理:假設原數是 [abcdefgh],每乙個字母代表 0 或 1,要求的是 a+b+c+d+e+f+g+h

第一步以後,變成 [a+b][c+d][e+f][g+h],每個方括號 2 bits

第二步以後,變成 [a+b+c+d] [e+f+g+h],每個方括號 4 bits

第三步以後,[a+b+c+d+e+f+g+h]

技術隨筆 計算某char變數bit位為1的總數目

通過移位實現 include size t func char x int main 移位思想 01010101 即為0x55 00110011 即為0x33 00001111 即為0x0f 首先 char是8bit 那麼通過 x x 0x55 x 1 0x55 這個運算加號左邊計算0 2 4 6位...

php如何判斷某變數的型別

gettype 用來取得變數的型別。返回的型別字串可能為下列字串其中之一 integer double string array object unknown type is numeric mixed var 檢驗測定變數是不是為數碼或數碼字串 is bool 檢驗測定變數是不是是布林型 is f...

如何把char字串迴圈右移N位

c語言實現 輸入乙個字串,將其迴圈右移n位。1.利用strcpy 函式實現 即將輸入pstr的後n位放入temp的前n位,再將pstr所有 到 o 結束 放入temp的後面。假如pstr 12345678 n nbits 3,則這時候,temp 67812345678 所以再把temp後面多餘部分截...