class RadixChange //进制转换:Radix:进制(医用,计算机的叫法不会 = =||)
{
<span style="background-color: rgb(255, 255, 0);">/*
在转换进制前必须要了解进制转换几个特别重要的地方
1.进制转化的功能在系统中已经封装好了 ,我们这次主要是练习方法和思路
2.注意 位运算 !注意计算机中所有数字都是以补码的形式出现,注意&运算的妙用!
3.先一步步来把,先开始把一个十进制数字转化成十六进制。
4.我们首先想到,二进制,四个一组!可以用位运算将四位提取出来!
我给这个方法取名:toBinary()
*/</span>
<span style="background-color: rgb(51, 255, 51);">/*以下是原来带有注释的版本
public static void main(String[] args){
int decimal=60;//decimal:十进制
toHexadecimal(decimal);//转化成16进制
toOctonary(decimal);//转化成8进制
toBinary(decimal);//转化成8进制
}
public static void toHexadecimal(int num){
//我怎么判断他对应的进制数有几位呢?
//我可以用不停>>的方法,看看经过多少次到2,就是有多少位!
int count=knowCount(num,16);
//这是我就可以进行count次>>运算,将每个4位二进制的数字提取出来!并把它放到数组里!
int []arrNum=new int[count];
for(int i=0;i<count;i++){
arrNum[count-1-i]=num&15;//使用倒着存放,避免了又要将数组反转的麻烦。嘿嘿
num=num>>4;
}
System.out.println(turnString(arrNum));
}
public static void toOctonary(int num){//转化成8进制,跟16进制的方法一样
int count=knowCount(num,8);
int []arrNum=new int[count];
for(int i=0;i<count;i++){
arrNum[count-1-i]=num&7;
num=num>>3;
}
System.out.println(turnString(arrNum));
}
public static void toBinary(int num){//转化为2进制,跟16进制的方法一样
int count=knowCount(num,2);
int []arrNum=new int[count];
for(int i=0;i<count;i++){
arrNum[count-1-i]=num&1;
num=num>>1;
}
System.out.println(turnString(arrNum));
}
public static int knowCount(int num,int radix){
//通过位运算的方法判断这个数字能拆成多少个4位二进制
int count=0;
for (;num!=0; count++){//count 就是位数
if (radix==16){
num=num>>4;
}else if (radix==8){
num=num>>3;
}else if (radix==2){
num=num>>1;
}
}
return count;
}
public static String turnString(int []chars){//使用之前写的转化成字符串的方法
String str="";
//但是在这里我们发现,16进制会传进来10 11 12 13 14 15等数字,我们需要将他转化成ABCDEF
for (int i=0;i<chars.length ;i++ ){
char []charsNew=new char[chars.length];
//开始写Repalce,替换方法。
charsNew[i]=replace(chars[i]);
str=str+charsNew[i]+" ";
}
return str;
}
public static char replace(int index){
char [] chars=new char[]{'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
return chars[index];
}</span>
<span style="background-color: rgb(255, 0, 0);">*********以下是精简注释的高级版本**************/</span>
<span style="color:#FF0000;">public static void main(String[] args){
int decimal=60;//decimal:十进制
Bridge(60,2);
}
//建立 桥方法 用来智能分配需要的方法,整合toHexadecimal,toOctonary,toBinary方法
public static void Bridge(int num,int radix){
if (radix==16){
toTurn(num,16,15,4);
}else if (radix==8){
toTurn(num,8,7,3);
}else if (radix==2){
toTurn(num,2,1,1);
}
}
//转化方法
public static void toTurn(int num,int radix,int Yu,int goBit){
int count=knowCount(num,radix);
int []arrNum=new int[count];
for(int i=0;i<count;i++){
arrNum[count-1-i]=num&Yu;//倒序存放数组,避免之后反转
num=num>>goBit;
}
System.out.println(turnString(arrNum));
}
//通过位运算的方法判断这个数字能拆成多少个4位二进制
public static int knowCount(int num,int radix){
int count=0;
for (;num!=0; count++){//count 就是位数
if (radix==16){
num=num>>4;
}else if (radix==8){
num=num>>3;
}else if (radix==2){
num=num>>1;
}
}
return count;
}
//转化成字符串的方法
public static String turnString(int []chars){
String str="";
for (int i=0;i<chars.length ;i++ ){
char []charsNew=new char[chars.length];
charsNew[i]=replace(chars[i]);
str=str+charsNew[i];
}
return str;
}
//“替换”方法。
public static char replace(int index){
char [] chars=new char[]{'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
return chars[index];
}
}</span>
老师给的思路: