二进制中1的个数

 更新时间:2013年09月27日 16:24:05   作者:  
这篇文章介绍了二进制中1的个数,有需要的朋友可以参考一下
前言
最近会手写一些常考的面试题目,测试通过后会跟大家分享一下

移位法
仅适应于正数的做法:

移位法就是每次判断n的二进制的最低位是否为1,时间复杂度为O(logn)
复制代码 代码如下:

int nativeOnenum(int n)  
{  
    int count = 0;  

    while (n) {  
        if (n & 1)  count ++;  
        n >>= 1;  
    }  

    return count;  
}

对于正数没问题,但是如果n为负数,这里就出现问题了,以负数-8为例,二进制补码形式为11111111|11111111|11111111|11111000|,右移一位之后,变成了11111111|11111111|11111111|11111100|,因为是负数,所以符号位会一直补1,导致最后全1,出现死循环

针对这种情况,我们可以用变量flag =1,从右向左去和n比较,32位int最多比较32次即可知道n中1的数量
复制代码 代码如下:

int oneNum(int n)  
{  
    int count, flag;  

    for (count = 0, flag = 1; flag; flag <<= 1) {  
        if (flag & n)   count ++;  
    }  

    return count;  
}

快速法
这种解法的思路是,二进制中1的个数只与1的位数有关,n & (n - 1)快速的去掉最左边的1,例如7(0111) & 6(0110)= 6(0110),快速的去掉了最左边的1
复制代码 代码如下:

int quickOne(int n)  
{  
    int count = 0;  

    while (n) {  
        count ++;  
        n = n & (n - 1);  
    }  

    return count;  
}

相关文章

  • 解决Maven项目中 Invalid bound statement 无效的绑定问题

    解决Maven项目中 Invalid bound statement 无效的绑定问题

    这篇文章主要介绍了解决Maven项目中 Invalid bound statement 无效的绑定问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • Java操作pdf文件的方法大全

    Java操作pdf文件的方法大全

    这篇文章主要为大家详细介绍了Java操作pdf文件的相关知识,例如合并pdf文件,手绘pdf文件以及导出PDF文件等,有需要的小伙伴可以参考一下
    2024-04-04
  • 如何发布jar包到maven中央仓库

    如何发布jar包到maven中央仓库

    这篇文章主要介绍了发布jar包到maven中央仓库的相关知识,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2023-12-12
  • SpringBoot集成tika实现word转html的操作代码

    SpringBoot集成tika实现word转html的操作代码

    Tika是一个内容分析工具,自带全面的parser工具类,能解析基本所有常见格式的文件,得到文件的metadata,content等内容,返回格式化信息,本文给大家介绍了SpringBoot集成tika实现word转html的操作,需要的朋友可以参考下
    2024-06-06
  • Trace 在多线程异步体系下传递流程解析

    Trace 在多线程异步体系下传递流程解析

    这篇文章主要为大家介绍了Trace 在多线程异步体系下传递流程解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-12-12
  • mybatis配置mapper-locations位置的三种方式小结

    mybatis配置mapper-locations位置的三种方式小结

    这篇文章主要给大家介绍了关于mybatis配置mapper-locations位置的三种方式,Mybatis-Plus的初衷是为了简化开发,而不建议开发者自己写SQL语句的,但是有时客户需求比较复杂,需要的朋友可以参考下
    2023-08-08
  • Java web访问http://localhost:8080/xx/xx.jsp报404错误问题的解决方法

    Java web访问http://localhost:8080/xx/xx.jsp报404错误问题的解决方法

    这篇文章主要给大家介绍了关于Java web访问http://localhost:8080/xx/xx.jsp报404错误问题的解决方法,很多小伙伴在刚开始用Springboot整合jsp开发时都会遇到这个问题, 按照别人的教程一步一步搭建,但就是会报404,文中介绍的非常详细,需要的朋友可以参考下
    2023-04-04
  • Java程序实现导出Excel的方法(支持IE低版本)

    Java程序实现导出Excel的方法(支持IE低版本)

    下面小编就为大家带来一篇Java程序实现导出Excel的方法(支持IE低版本)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-07-07
  • java报错:找不到或无法加载主类的解决方法简单粗暴

    java报错:找不到或无法加载主类的解决方法简单粗暴

    本文主要介绍了java报错:找不到或无法加载主类的解决方法简单粗暴,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-01-01
  • Java中引用类型之强引用、软引用、弱引用和虚引用详解

    Java中引用类型之强引用、软引用、弱引用和虚引用详解

    这篇文章主要介绍了Java中引用类型之强引用、软引用、弱引用和虚引用的相关资料,通过实际代码示例,展示了如何利用引用队列来跟踪对象的回收状态,并实现资源的自动清理,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-03-03

最新评论