bitcount java_java源码Integer.bitCount算法解析,分析原理

本文深入解析Java中Integer.bitCount方法,通过源码分析其计算两个整数异或值中1的个数的高效算法。该算法采用逐次二进制位分组统计,逐步减少计算复杂度。
摘要由CSDN通过智能技术生成

看了一道leetcode上面的题      461 ,Hamming Distance

计算两个整数有多少不同的位。其实很简单,取两个整数异或的值,然后计算出里面二进制有多少个1就行了。代码如下:

public int hammingDistance(int x, int y) {

return Integer.bitCount(x ^ y);

}

为什么要用bitCount来统计含1的位了?为什么不直接使用循环统计每个bit位了?

跳转到bitCount的源码中,如下:

public static int bitCount(int i) {

// HD, Figure 5-2

i = i - ((i >>> 1) & 0x55555555);

i = (i & 0x33333333) + ((i >>> 2) & 0x33333333);

i = (i + (i >>> 4)) & 0x0f0f0f0f;

i = i + (i >>> 8);

i = i + (i >>> 16);

return i & 0x3f;

}

原来是 先 两个两个一组,求二进制1的个数,并且用两位二进制存储在原处,然后四个四个一组,求二进制位1的个数,再把它存储以4位二进制到原处。以此类推直到计算完成。

src

store

remark

00

<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值