Java把10进制转换为2进制

本文介绍了一个Java程序,该程序实现将十进制数转换为二进制,并通过比较来调整二进制数。文章包含了一个具体的例子,演示了如何通过递归方式获取二进制位数并进行数值对比。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package practice;

import java.util.ArrayList;

public class Lianxi1_5 {
	private ArrayList<Integer> al = new ArrayList<>();
	private Integer in;
	private int xx;
	//获取2进制的位数
	public void getBinary(int x){
		in = x/2;
		if(in==0){
			al.add(x%2);
		}else{
			al.add(1);
			getBinary(in);
		}
		//Java默认的是以e为底,转换成以2为底的x,计算出与2的n次方最接近的数,确定要转换为2进制的位数
//		double d = Math.log(x)/Math.log(2);
		
	}
	public void compare(ArrayList<Integer> alist){
		int result = 0;
//		System.out.println(xx);
		for(int i=0; i<alist.size(); i++){
			result+= Math.pow(2, alist.size()-i-1);
			if(result< xx){
				result += Math.pow(2, alist.indexOf(alist.get(i))-1-i);
				System.out.println("这里是1 2^"+ (alist.indexOf(alist.get(i))-1-i));
			}else if(result == xx){
				for(int j= i+1; j<alist.size(); j++){
					//满足条件后面的全部置零
					al.set(j, 0);
				}
				System.out.println("满足条件:" + i);
				break;
			}else{
				result -= Math.pow(2,(alist.size() -i -1));
				System.out.println("这里是0");
				alist.set(i, 0);
			}
		}
		System.out.println("转为二进制" +BinaryToString(alist));

	}
	private String BinaryToString(ArrayList<Integer> alist){
		String result ="";
		for(Integer it : alist){
			result += it+"";
		}
		return result;
	}
	public int twoToTen(ArrayList<Integer> alist){
		int ten=0;
		for(int i=0; i<alist.size(); i++){
			ten += alist.get(i) * Math.pow(2, alist.size() -i -1);
		}
		return ten;
	}
	public static void main(String[] args) {
		Lianxi1_5 lx = new Lianxi1_5();
		lx.xx = 8000;
		lx.getBinary(lx.xx);
		System.out.println("长度:"+lx.al);
		lx.compare(lx.al);
		System.out.println("转换为十进制:" + lx.twoToTen(lx.al));
	}
}


长度:[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
这里是1 2^-1
这里是1 2^-2
这里是1 2^-3
这里是1 2^-4
这里是1 2^-5
这里是0
满足条件:6
转为二进制1111101000000
转换为十进制:8000

这里又有一个问题,为什么Math.pow()中的第2个参数是负数得出的结果还是正确的??

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值