參考文章:
最簡單的方法:
int bitcount0(unsigned intn)
return
c ;}
消除統計法
int bitcount2(unsigned intn)
return
c ;}
8bit查表法
unsigned int table[256] =;int bitcount2(unsigned int
n)
巧妙轉換法
int bitcount3(unsigned int#includen)
typedef unsigned int uint32;
const uint32 m1 = 0x55555555; // 01010101010101010101010101010101
const uint32 m2 = 0x33333333; // 00110011001100110011001100110011
const uint32 m4 = 0x0f0f0f0f; // 00001111000011110000111100001111
const uint32 m8 = 0x00ff00ff; // 00000000111111110000000011111111
const uint32 m16 = 0x0000ffff; // 00000000000000001111111111111111
const uint32 h01 = 0x01010101; // the sum of 256 to the power of 0, 1, 2, 3
intpopcount_2(uint32 x)
inline shortpopcount_3(uint32 x)
//除了指令法,這種最快
指令法
//sse - 4,編譯時加入 -msse4[相當於4.1 + 4.2]#include
unsigned int n =127
;unsigned
int bitcount = _mm_popcnt_u32(n) ;
關於sse有乙個很好的學習資料,各個sse版本裡的函式及其功能!
反轉32 位數
筆試的時候遇見一道這樣的題目,不會做.回來趕緊上網找.感覺牛人就是牛人.這樣的演算法我為啥就是想不出來呢 把乙個32位的數按位反轉,就是第32位轉到第1位,第31位轉到第2位 什麼樣的演算法最節省效率?參考http www.yuanma.org data 2007 0723 article 2763...
32位隨機數
軟體架構師何志丹 宣告 class dll sn ext class crand32 優點 一,不需要隨機種子,多個物件會隨機不同的種子。二,範圍和uint的範圍同 實現int crand32 s iobjnum 0 crand32 crand32 unsigned int crand32 rand...
反轉32位數
1 問題 把乙個32位的數按位反轉,就是第32位轉到第1位,第31位轉到第2位 什麼樣的演算法最節省效率?2 解答 un signed int bit reverse unsigned int n 第一行 為奇偶位相互交換 第二行為以兩位為一單元,奇偶單元進行交換 第三行為以四位為一單元,奇偶單元進...