1.移位与来判断
例如:
#include <stdio.h>
int main()
{
uint8_t Cnt = 0;
uint8_t data=0x08;
while(data)
{
if(data & 0x01)
{
Cnt++;
}
data>>=1;
}
printf("1的数量为%d\r\n",Cnt);
return 0;
}
2.Brian Kernighan算法
可以使用Brian Kernighan算法来判断unsigned char类型中有几个1。具体步骤如下:
- 初始化一个计数器count为0。
- 对输入的unsigned char类型的数进行按位取反操作,然后与原数进行按位与操作。
- 将结果加到计数器count上。
- 重复步骤2和3,直到原数变为0。
- 返回计数器count的值。
以下是C语言实现的代码:
#include <stdio.h>
unsigned char count_ones(unsigned char num) {
unsigned char count = 0;
while (num) {
num = ~num & (num - 1);
count++;
}
return count;
}
int main() {
unsigned char num = 9; // 二进制表示为1001,有3个1
printf("Number of ones in %u is %u
", num, count_ones(num));
return 0;
}