二进制中1的个数

来源:互联网 发布:ubuntu 桌面u盘路径 编辑:程序博客网 时间:2024/05/16 01:44

题目:写一个函数输入一个整数,输出该二进制表示中1的个数

eg:输入9;9的二进制为:1001;输出为:2(2个1);

代码如下:

#include<stdio.h>//1.前俩种常规解法//2.除法的效率要比移位运算的效率低很多//3.但如果是负数前俩种算法会出现死循环,则需要改变移位的目标,改为去改变flag;//4.最后一种是最优的方法,此规律很难发现,思路如下:int count_one_bit4(int num);//除法、模余int count_one_bit(int num){int count = 0;while (num){if (num % 2)++count;num /= 2;}return count;}//移位、按位与int count_one_bit2(int num){int count = 0;while (num){if (num & 1)++count;num >>= 1;}return count;}//避免死循环的解法(负数)int count_one_bit3(int num){int count = 0;unsigned int flag = 1;while (flag){if (num & flag)++count;flag <<= 1;}return count;}//1.整数减1;(将从右到左的第一个1以及1右边的数做取反操作)//2.减1的结果再与原整数相与;(将上述所说的1右边的数做置0操作)//3.1个二进制中有几个1就可以做几次这样的操作;int count_one_bit4(int num){int count = 0;while (num){++count;num &= (num - 1);}return count;}//测试如下:int main(){printf("count_one_bit:%d\n", count_one_bit(9));printf("count_one_bit2:%d\n", count_one_bit2(9));printf("count_one_bit3:%d\n", count_one_bit3(9));printf("count_one_bit4:%d\n", count_one_bit4(9));return 0;}

结果如下图:





1 0
原创粉丝点击