看板 C_and_CPP 關於我們 聯絡資訊
節省一下用個大小16的表就好了... int CountBits(unsigned char i) { static int table[]={0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4}; return table[i&0xf]+table[i>>4]; } 之前有一個懷念的演算法 曾經在離散課上提到 count=0; while(a!=0) { count++; a=a&(a-1); } 任何二進位表示都是0跟1的組合 每次減1時就會早成該最右邊的1變成0且其右邊的bit接變為 1 例如 192 =11000000 192-1=191=10111111 經過 &(AND) =10000000 一直做到原來的值變成0就可以知道有幾個1了... 有趣 不過最快的還是查表...:P -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.115.217.14
cutecpu:推,好強的離散演算法 02/19 00:05