二进制中1的个数

原创 2015年11月17日 20:51:11
题目描述


输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。


思路:借助n与n-1&运算,如果一个整数不为0,那么这个整数至少有一位是1。如果我们把这个整数减1,那么原来处在整数最右边的1就会变为0,原来在1后面的所有的0都会变成1(如果最右边的1后面还有0的话)。其余所有位将不会受到影响。
举个例子:一个二进制数1100,从右边数起第三位是处于最右边的一个1。减去1后,第三位变成0,它后面的两位0变成了1,而前面的1保持不变,因此得到的结果是1011.我们发现减1的结果是把最右边的一个1开始的所有位都取反了。这个时候如果我们再把原来的整数和减去1之后的结果做与运算,从原来整数最右边一个1那一位开始所有位都会变成0。如1100&1011=1000.也就是说,把一个整数减去1,再和原整数做与运算,会把该整数最右边一个1变成0.那么一个整数的二进制有多少个1,就可以进行多少次这样的操作。


C/C++代码:

class Solution
{
public:
    int  NumberOf1(int n)
    {
        int count = 0;
        while(n != 0)
        {
            count++;
            n = n & (n - 1);
        }
        return count;
    }
};


版权声明:本文为博主原创文章,未经博主允许不得转载。

快速统计二进制中1的个数(分析篇)

今天做了一道题,发现n&=(n-1)这个式子很好奇,然后试着算了一遍发现它竟然能够快速统计二进制1的个数,特此拿来分享一下。 首先,分析一下该式子,先可以简化为 n=n&(n-1); 我...
  • u013243347
  • u013243347
  • 2016年08月16日 15:12
  • 1389

python版统计文件二进制内容中的0和1个数

知乎上看到一个问题http://www.zhihu.com/question/20289032,看到票数最高的回答中python程序如下: import struct, os filename, co...
  • hebliyao
  • hebliyao
  • 2015年04月05日 21:58
  • 1271

计算一个数的二进制位中1的个数的方法总结

方法一、通过移位分别判断各个位 int bit_count(unsigned int n) { int count;         for(count=0;n;n>>=1) { count+=n&1...
  • yangshuangtao
  • yangshuangtao
  • 2015年09月26日 20:05
  • 1871

求二进制数中1的个数.pdf

  • 2011年12月03日 12:13
  • 257KB
  • 下载

判断一个正整数二进制表示中1的个数/////////////质数判断

一、一个正整数二进制表示中“1”个数 java代码实现 //算法一----快速法 public Class Solution { public int NumberOf1(int n)...
  • hefenglian
  • hefenglian
  • 2018年01月16日 11:51
  • 3

程序员面试题精选100题(22)-整数二进制表示中1的个数[算法]

题目:输入一个整数,求该整数的二进制表达中有多少个1。例如输入10,由于其二进制表示为1010,有两个1,因此输出2。 分析:这是一道很基本的考查位运算的面试题。包括微软在内的很多公司都曾采用过...
  • GarfieldEr007
  • GarfieldEr007
  • 2016年02月23日 12:19
  • 932

统计一个整数n的二进制表示中1的个数的几种解法

统计一个整数n的二进制表示中1的个数; 分析:此题有多种解法. 1. 除2取余法:求一个整数的二进制的表示是,用的方法是除2取余。对于本题,只是统计一下余数为1的个数而已。 2. 位模式法+移位...
  • wzb56
  • wzb56
  • 2012年10月29日 18:37
  • 1668

关于求二进制数中1的个数的算法

原文出处:http://www.cnblogs.com/graphics/archive/2010/06/21/1752421.html   算法-求二进制数中1的个数 问题描述 ...
  • lsk1124981644
  • lsk1124981644
  • 2015年02月03日 15:04
  • 331

找出二进制表示中1的个数相同,且大小最接近的那两个数

public int getNext(int n) { /* 计算c0和c1 */ int c=n; int c0=0; int c1=0; while(((c&1)==0) && (...
  • wangfengfan1
  • wangfengfan1
  • 2015年08月24日 21:33
  • 1146

剑指offer面试题10:二进制中1的个数(与位运算有关)

题目:输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。例如把9表示成二进制是1001,有2位是1.因此如果输入9,该函数输出2。 分析: 1、可以用一个二进制表示时仅有1位为1的整...
  • SunCherryDream
  • SunCherryDream
  • 2017年05月19日 15:01
  • 196
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:二进制中1的个数
举报原因:
原因补充:

(最多只允许输入30个字)