Re: [問題] 數1個byte中有幾個bit為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
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章