账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    Java Integer.bitCount方法的实现分析
    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方法是一个用于计算整数的二进制位数的静态方法。这个方法的实现原理主要基于递归的特性。

      1. 递归定义:如果一个整数的二进制表示的最低位是0,那么这个整数的二进制位数就是0;如果最低位不是0,那么这个整数的二进制位数就是1的个数减1。

      2. 实现细节:

      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,然后再回到最低位进行检查。

      1. 注意事项:

      这个方法的时间复杂度是O(logn),因为每次二进制位数的位数减1都需要进行一次递归调用。空间复杂度是O(1),因为我们只使用了常数个变量。

      1. 使用场景:

      这个方法通常用于处理二进制数,例如检查一个整数是否为0。它也可以用于其他需要计算二进制位数的场景,例如计算一个字符串的二进制表示的位数,或者计算一个数字的位数。

    更多回答
    网站公告
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部