统计二进制中1的个数的两种方法:布赖恩·克尼根算法笔记附加Integer.bitCount()

本文介绍了统计二进制中1的个数的两种方法,包括布莱恩·克尼根位计数算法的详细解释和Java Integer的bitCount()方法的使用。通过实例代码展示如何实现并应用这两种方法。
摘要由CSDN通过智能技术生成

今天在刷leetcode的时候,忘记了布莱恩·克尼根算法,所以回过头来复习一遍,顺手写下来。

问题是:如何得到一个二进制数中1的数量?

统计二进制中1的个数的两种方法:

本质上的位运算要对原数进行移位运算,然后每次对其进行”取模运算(i % 2)“或者” AND 操作(i & 1)“来判断每次移位运算移过来的东西是1还是0(逐位比较边缘位置是否为 1);

一、布莱恩·克尼根位计数算法

布莱恩·克尼根位计数算法的基本思想是:使用特定比特位和算术运算移除等于 1 的最右比特位。
比如要计算x:10001000 10001000的“1”个数:
x:10001000 10001000
x-1: 10001000 10000111
那么x&x-1的值为ans=10001000 10000000.
如此循环直到ans的值为0,每次count+1即可记录x中原有的1数量;
代码举例:

public class Example {
   
    public static void main(String[] args) {
   
        //布莱恩克尼根算法举例:
        int ans = 0
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值