十进制转化为二进制Java实现

  • 提取2的幂
    这个方法用代码实现貌似有点麻烦,需要探测大小,我只实现了整数十进制到二进制的转化
/*
	 * 提取2的幂
	 */
	public static String TenToBin1(int ten) {
		
		
		int index = 0;
		StringBuffer binBuffer = new StringBuffer();
		
		//int类型是4个字节,32位,找到刚好大于输入的数的位置
		for(int i = 0; i <= 32; i++) {
			if((int)(Math.pow(2, i)) <= ten) {
				continue;
			} else {
				index = i;
				break;
			}
		}
		//开始探测,若ten大于2的index次幂,就相减,对应位数为1
		for(int j = index - 1; j >= 0; j--) {
			if(ten - Math.pow(2, j) > 0) {
				binBuffer.append("1");
				ten = (int) (ten - Math.pow(2, j));
				continue;
			} else if(ten - Math.pow(2, j) < 0) {
				binBuffer.append("0");
				continue;
			} else {
				binBuffer.append("1");
				index = j;
				break;
			}
		}
		
		if(index != 0) {
			for(int z = index - 1; z >= 0; z--) {
				binBuffer.append("0");
			}
		}
	
		return binBuffer.toString();
		
	}

测试

public static void main(String[] args) {
		System.out.println(TenToBin1(3));
		System.out.println(TenToBin1(8));
		System.out.println(TenToBin1(9));
		System.out.println(TenToBin1(16));
	 }

在这里插入图片描述
②基数相除,相乘,这里也只是实现了整数十进制的转化,由于double不精确,所以小数计算起来有点麻烦,有待解决

/*
	 * 基数连除、连乘法
	 */
	public static String TenToBin2(String tenString) {
		
		
		StringBuffer s = new StringBuffer();
		StringBuffer s1 = new StringBuffer();
		int index = tenString.indexOf('.');
		if(index == -1) {
			//取整数部分
			int d = Integer.parseInt(tenString); 
			while(d != 0) {
				s.append(d%2);
				d = (int)(d/2);
			}
			String str = s.toString();
			for(int i = str.length() - 1; i >= 0; i--) {
				s1.append(str.charAt(i));
			}
			
		} else {
			//计算整数部分
			String str1 = tenString.substring(0, index);
			int integer = Integer.parseInt(str1);
			while(integer != 0) {
				s.append(integer%2);
				integer = (int)(integer/2);
			}
			String str = s.toString();
			for(int i = str.length() - 1; i >= 0; i--) {
				s1.append(str.charAt(i));
			}

			
		}
		
		return s1.toString() ;
		
	
		
		
	}

猜你喜欢

转载自blog.csdn.net/weixin_37711738/article/details/89553305