求一个数字二进制中1的个数

来源:互联网 发布:重庆网络问政区县 编辑:程序博客网 时间:2024/06/07 13:52
1.一个很简单的思路,把每一位与1相与如果结果是1,就代表这一位是1,相反是0
int BinaryNumOne1(int num){int count = 0;while (num){if (num & 1){count++;}num = num >> 1;}return count;}
每次把num右移一位,但是如果num的最高位为1其他位为0,那它要移32位(假设int占4个字节),这样效率就比较的低了

2.改进方法:
代码如下:
int BinaryNumOne2(int num){int count = 0;while (num){count++;num = num & (num - 1);}return count;}

1 0
原创粉丝点击