一個字節中二進位1的個數
兩個相似的方法,一個右移所查看的字節;一個查看左移1.
#include <stdio.h>
int getOneBits(unsigned char num)
{
int count = 0;
for(int i = 0; i < 8; i++)
{
if((num & (1 << i)) != 0)
count++;
}
return count;
}
int main(void)
{
printf("%d\n", getOneBits((unsigned char)10));
return 0;
}
#include <stdio.h>
int getOneBits(unsigned char num)
{
int count = 0;
for(int i = 0; i < 8; i++)
{
if(((num>>i) & 1) != 0)
count++;
}
return count;
}
int main(void)
{
printf("%d\n", getOneBits((unsigned char)10));
return 0;
}
在網上看到有查表法,效率高,貌似比較麻煩:
//將0x00~0xFF對應存在二進位0的個數保存在unsigned int C[256]中
const int C[256]={8,7,7,6,7,6,6,5,7,……,1,0};
//然後
int ZeroBitsCount(BYTE b) {return C[(unsigned int)b];}