十进制转换二进制通过与运算和移位

我们一般将十进制转换成而今使用的是对二求余然后除二的方法,其实很多时候我们不能更好的理解,我今天讲解一下通过位运算的方法怎么实现进制转换。

思路:

无论是数字还是字母在计算机里存储的都是二进制形式,有人说16进制,16进制也不过是二进制的缩写,本质还是二进制。假如现在有一个数8,计算机里二进制形式应该是1000(我去掉了前缀0),那么需要想办法获取这四位的每一位,然后通过字符串输入就OK,怎么获取一位,我们知道&运算a&b。

a b a&b
1 1 1
1 0 0
0 1 0
0 0 0

那么每次取一位,然后向右移一位,直到这个数为零:

下面代码:

package com.fgh;

import java.util.Scanner;

public class Number {
	public static void main(String[] args) {
		Scanner scan=new Scanner(System.in);
		while(scan.hasNext()){
		int num=scan.nextInt();
		System.out.println(mathToBinary(num));
		
		}
		
	}
	
	public static String toBinary(int num){
		//定义一个String用于返回得到的二进制
		String binary="";
		//判断接收的数是否为零,是零直接返回零
		if(num==0){
			return "0";
			}
		//判断移位后的数是否为零,为零结束
		while(num!=0){
			//获取每一位
			int bit=num&1;
			//将获取的位添加到字符串
			binary=binary+bit;
			//向右移一位
			num=num>>1;
		}
		//我们获得的二进制是反向的所以通过Stringbuffer工具类把字符串反转
		return new StringBuffer(binary).reverse().toString();
		
	}
	//数学方式
	public static String mathToBinary(int num){
		String binary="";
		if(num==0){
			return "0";
		}
		while(num!=0){
			int bit=num%2;
			binary=binary+bit;
			num=num/2;
			
		}
		return new StringBuffer(binary).reverse().toString();
	}

}
通过这个二进制的计算我们可以将十进制转换任意进制比如八进制,十六进制。
八进制:与七,移三位。十六进制:与十五,移四位。

猜你喜欢

转载自blog.csdn.net/lkwan123/article/details/73251216