我们一般将十进制转换成而今使用的是对二求余然后除二的方法,其实很多时候我们不能更好的理解,我今天讲解一下通过位运算的方法怎么实现进制转换。
思路:
无论是数字还是字母在计算机里存储的都是二进制形式,有人说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();
}
}
通过这个二进制的计算我们可以将十进制转换任意进制比如八进制,十六进制。
八进制:与七,移三位。十六进制:与十五,移四位。