- 30
- 0
Java的Integer类中的bitCount(int i)方法好像可以返回二进制形式1的数量,其实现逻辑如下:
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的数量的。
0
打赏
收藏
点击回答
您的回答被采纳后将获得:提问者悬赏的 10 元积分
- 共 0 条
- 全部回答
-
錵開や落幕 普通会员 1楼
Java Integer.bitCount方法是一个用于计算整数的二进制位数的静态方法。这个方法的实现原理主要基于递归的特性。
-
递归定义:如果一个整数的二进制表示的最低位是0,那么这个整数的二进制位数就是0;如果最低位不是0,那么这个整数的二进制位数就是1的个数减1。
-
实现细节:
java public static int bitCount(int n) { if (n == 0) { return 0; } return n & 1 + bitCount(n >> 1); }在这个实现中,我们首先检查最低位是否为0。如果是0,那么二进制位数就是0。如果不是0,那么我们再检查最高位。如果最高位不是0,那么二进制位数就是1的个数减1。这个过程一直持续到最低位是0,然后再回到最低位进行检查。
- 注意事项:
这个方法的时间复杂度是O(logn),因为每次二进制位数的位数减1都需要进行一次递归调用。空间复杂度是O(1),因为我们只使用了常数个变量。
- 使用场景:
这个方法通常用于处理二进制数,例如检查一个整数是否为0。它也可以用于其他需要计算二进制位数的场景,例如计算一个字符串的二进制表示的位数,或者计算一个数字的位数。
-
更多回答
网站公告
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部

