十进制转二进制相关

目录

十进制数字n,求对应的二进制,或者求对应的二进制的1的个数

内置方法:

传统方法:

与运算方法:


十进制数字n,求对应的二进制,或者求对应的二进制的1的个数

内置方法:

Integer提供了一些内置方法来做进制转换

        // Integer 内置方法把十进制转换为其他进制
        String b = Integer.toBinaryString(10);
        String o = Integer.toOctalString(10);
        String h = Integer.toHexString(10);

        // Integer 内置方法把二进制序列转化为其他进制
        Integer o1 = Integer.valueOf("1011", 8);
        Integer i1 = Integer.valueOf("1011", 10);
        Integer h1 = Integer.valueOf("1011", 16);

传统方法:

       判断n%2的结果,记录是否为1;更新n=n/2;直至n==1

// 统计十进制数字中1的个数
public static int count1(int n){
    int count = 0;
    while(n!=1){
        if(n%2!=0){
            count++;
        }
    }
    return count;
}

与运算方法:

传统方法时间复杂度非常高,效率非常低,且对于数字非常大的情况可能会溢出而失效

考虑:n与2^i做与运算同时为true才是true),这样结果为1说明i位置一定是1

这样很容易计算出十进制对应的二进制,也很高效的统计出二进制数字中1的个数

// 统计十进制数字对应的二进制数字中1的个数
public static int count2(int n){
    int count = 0;
    for(int i=0;i<32;i++){ // 最大32位数字嘛
        if((n&(1>>i))!=0){ // n与2^i与运算的结果不为0,则该位置一定是1
            count++;
        }
    }
    return count;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值