专栏首页个人分享二进制中1的个数

二进制中1的个数

输入一个整数,输出该数二进制表示中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,就可以进行多少次这样的操作。

public int searchNumberOne(int n){
    int count = 0;
    while(n!=0){
        count++;
        n = n & (n -1);
    }
       return count;
    }
}

这么变态。。。这都能想到。。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 斐波那契数列

    用户3003813
  • Java方法总结与源码解析(未完待续)

    源码通过获取字符串的长度,遍历每个字符,将传入的字符进行比较,如果与需要截取的字符相同,则调用substring方法。

    用户3003813
  • MongoDB 3.0 导入命令

    ./mongoimport -h 192.168.77.129 --db test --collection restaurants --drop --file...

    用户3003813
  • Reids系列(五)底层数据结构之整数集合

    Redis 已经是大家耳熟能详的东西了,日常工作也都在使用,面试中也是高频的会涉及到,那么我们对它究竟了解有多深刻呢?

    呼延十
  • HDU 2092 整数解

    整数解 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/...

    Angel_Kitty
  • 剑指offer:二进制中1的个数

    本来是打算次条每天更新面试题和算法刷题的,加上头条一共要三篇文章,实在更不来,而且两篇都看的人也不多,所以我就算法刷题和面试题论着更新,更新的时候多更新几道。

    帅地
  • 编程小白 | 每日一练(113)

    这道理放在编程上也一并受用。在编程方面有着天赋异禀的人毕竟是少数,我们大多数人想要从编程小白进阶到高手,需要经历的是日积月累的学习,那么如何学习呢?当然是每天都...

    C语言入门到精通
  • Python模拟大整数乘法的小学竖式计算过程

    让我们先看个图回顾一下小学学过的计算整数乘法的竖式计算过程 ? 然后再来看如何使用Python来模拟上面的过程,虽然在Python中计算任意大的数字乘法都没有问...

    Python小屋屋主
  • Android自定义View实现音频播放圆形进度条

    初始化自定义View,在这里获取播放器按钮图片以及初始化画布画笔对象以及设置将画笔设置抗锯齿

    砸漏
  • APTSimulator:一款功能强大的APT模拟攻击工具集

    今天给大家介绍的是一款名叫ATPSimulator的攻击模拟工具集(Windows Batch脚本),这套工具集可以让一台计算机系统看起来像受到了APT攻击一样...

    FB客服

扫码关注云+社区

领取腾讯云代金券