java十进制和二进制转换

1.十进制整数转二进制

 

思路: 整数除以2,每次将余数保存起来,商循环除以2,直到商为0为止,然后将所有余数逆序打印出来。

例子:

23/2  商: 11  余数: 1
11/2  商: 5   余数: 1
5/2    商: 2   余数: 1
2/2    商: 1   余数: 0
1/2    商: 0   余数: 1

 //十进制整数转二进制,每次取商除以2直至商为0,余数追加,最后倒序一下
    public static StringBuilder intToBinary(int n){
        StringBuilder builder = new StringBuilder();
        //商
        int quotient = n;
        //余数
        int remainder =0;
        while(quotient!=0){
            quotient = n/2;
            remainder = n%2;
            builder.append(remainder);
            n = n/2;
        }
        return builder.reverse();
    }

2.十进制小数转二进制

思路: 小数乘以2,每次乘完取整(1或者0)放到数组中,然后将剩余小数部分继续乘以2,直到小数部分为0或者达到所要求的精度为止,再讲所有余数按顺序打印出来。

例子:

0.813*2   整数部分: 1  小数部分: 0.626
0.626*2   整数部分: 1  小数部分: 0.252
0.252*2   整数部分: 0  小数部分: 0.504
0.504*2   整数部分: 1  小数部分: 0.008
0.008*2   整数部分: 0  小数部分: 0.016

11010是精度为5的小数点后五位,输出为0.11010

注:小数的十进制转化为二进制的误差不大于2^-4是指小数点后4位

代码实现:

 //十进制小数转成二进制,d是十进制的小数,decimal是精度
    public static StringBuilder doubleToBinary(Double d,int decimal) throws Exception{
        if(decimal<=0 || decimal>32){
            throw new Exception("精度不合法");
        }
        StringBuilder str = new StringBuilder();
        double rem = 0;
        while(decimal>0){
            rem = d*2;
            if(rem>=1){
                str.append(1);
                d = rem -1;
            }else{
                str.append(0);
                d = rem;
            }
            decimal--;
        }
        return str;
    }

3.十进制的整数加小数转二进制

思路: 整数和小数分别转换,然后将两个数组以小数点为分割分别打印出来。
例子:

代码实现:

public static StringBuilder allToBinary(double d) throws Exception{
    int in = (int)d;//整数部分
    double res = d - in;//小数部分
    StringBuilder str = new StringBuilder();
    str.append(intToBinary(in));
    str.append(".");
    str.append(doubleToBinary(res,4));
    return str;
}

调用和运行结果:

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值