#include <stdio.h>
/*
* 统计一个整数的二进制中1的个数
*/
// 解法1
int countOne(int num)
{
int count = 0;
while ( num )
{
// 当最后一位为1时,则加1
if( num & 1 ){
++count;
}
num >>= 1;
}
return count;
}
/* 解法2,比如当二进制中的1只有一个时,num & (num - 1)会等于0,以此判断即可。
* 比如: 0000 0100
* & 0000 0011
* = 0000 0000
*/
int countOne2(int num)
{
int count = 0;
while ( num )
{
num &= (num - 1) ;
++count;
}
return count;
}
// 解法3,查表法,将有限个数的对应的1的个数存在一个数组中,查表的时间复杂度为O(1),但是空间复杂度较大.
int countOne3(int num)
{
// 列举了0到15 的表
int countTable[16] = {
0,1,1,2,
1,2,2,3,
1,2,2,3,
2,3,3,4
};
if( num > MAX_SIZE && num < 0 ){
return -1;
}
return countTable[num];
}
// main
int main(int argc, char *argv[])
{
printf("count : %d.\n", countOne(5) );
printf("count : %d.\n", countOne2(5) );
printf("count : %d.\n", countOne3(5) );
return 0;
}
统计一个整数的二进制中1的个数的三种解法
最新推荐文章于 2024-01-21 21:17:10 发布