- #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;
- }
- 【本文转至】http://blog.csdn.net/bboyfeiyu/article/details/9235451
统计一个整数的二进制中1的个数的三种解法
最新推荐文章于 2023-10-06 09:59:05 发布