Re: [問題] 數1個byte中有幾個bit為1

看板C_and_CPP (C/C++)作者 (C++)時間19年前 (2006/02/18 23:05), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串1/1
節省一下用個大小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

02/19 00:05, , 1F
推,好強的離散演算法
02/19 00:05, 1F
文章代碼(AID): #13zpVFxX (C_and_CPP)
文章代碼(AID): #13zpVFxX (C_and_CPP)