作者在 2019-05-14 16:47:45 发布以下内容
懒人不愿做题,所有的东西都用程序跑出来是最好的,下面做一个十进制、八进制、十六进制数互相转换的小程序
public class JZTurn {
public static void main(String[] args) {
int num2 = 1314521;
System.out.println("十进制数:"+num2);
System.out.println("十进制转换二进制:"+turn2(num2));
System.out.println("十进制转换八进制:"+turn8(num2));
System.out.println("十进制转换十六进制:"+turn16(num2));
//2-> 8
System.out.println("二进制转换八进制:"+twoTurnEight(turn2(num2)));
System.out.println("八进制转换二进制:"+eightTurnTwo(turn8(num2)));
System.out.println("八进制转换十六进制:"+eightTurnSixteen(turn8(num2)));
//2->16
System.out.println("二进制转换十六进制:"+twoTurnSixteen(turn2(num2)));
}
/**
* 10进制转二进制
* @param num
* @return
*/
public static String turn2(int num){
String shortTimeNum = "";
int remainder = 0;
/**
* 模拟短除法
*/
while(num >= 1){
remainder = num % 2;
num = num / 2;
shortTimeNum = remainder + shortTimeNum;
}
return shortTimeNum;
}
/**
* 10进制转8进制
* @param num
* @return
*/
public static String turn8(int num){
String shortTimeNum = "";
int remainder = 0;
/**
* 模拟短除法
*/
while(num >= 1){
remainder = num % 8;
num = num / 8;
shortTimeNum = remainder + shortTimeNum;
}
return shortTimeNum;
}
/**
* 10进制转16进制
* @param num
* @return
*/
public static String turn16(int num){
String shortTimeNum = "";
int remainder = 0;
String tempStr = "";
/**
* 模拟短除法
*/
while(num >= 1){
remainder = num % 16;
tempStr = getOtherNum(remainder);
num = num / 16;
shortTimeNum = tempStr + shortTimeNum;
}
return shortTimeNum;
}
/**
* 2进制转换8进制
* 概念说明:这里转换的是整数,从右向左三位一组分别乘以2的零次方,2的一次方,2的2次方
* 然后把每组中的数相加,再把各组从左向右拼接到一起
* @param strNum2
*/
public static String twoTurnEight(String strNum2){
String resultNum = "";
int remainder = strNum2.length() % 3;
//补位 三位一组,最后一组位数不够用0补充
switch(remainder){
case 1:
strNum2 = "00"+strNum2;
break;
case 2:
strNum2 = "0"+strNum2;
break;
}
int index = strNum2.length()-1;
int tempNum1 = 0;
int tempNum2 = 0;
int tempNum3 = 0;
while(index>=1){
index -- ;
if(index % 3 == 0){
//每个数为一组
tempNum1 = Integer.parseInt(strNum2.substring(index, index+1));
tempNum2 = Integer.parseInt(strNum2.substring(index+1, index+2));
tempNum3 = Integer.parseInt(strNum2.substring(index+2, index+3));
resultNum = tempNum3*1+tempNum2*2+tempNum1*4+resultNum;
}
}
return resultNum;
}
/**
* 八进制转换二进制
* @param eightNum
* @return
*/
public static String eightTurnTwo(String eightNum){
String twoNum = "";
int index = eightNum.length()-1;
String tempNum = "";
while(index>=0){
tempNum = turn2(Integer.parseInt(eightNum.substring(index, index+1))) ;
//补位,在转换8进制时是每三为二进制数为一组,转换回二进制时位数也需要是三位,不够用零补
switch (tempNum.length()) {
case 1:
tempNum = "00"+tempNum;
break;
case 2:
tempNum = "0"+tempNum;
break;
}
twoNum = tempNum + twoNum;
index--;
}
return twoNum;
}
/**
* 2进制转换16进制
* 概念说明:这里转换的是整数,从右向左四位一组分别乘以2的零次方,2的一次方,2的2次方,2的3次方,
* 然后相加把每组最终的得数一次从左向右拼到一起,若其中一组的和大于9,按照对应关系转换后再把每组的结果拼接到一起
* @param strNum2
*/
public static String twoTurnSixteen(String strNum2){
String resultNum = "";
int remainder = strNum2.length() % 4;
//补位,四位一组,最后一组位数不够用0补充
switch(remainder){
case 1:
strNum2 = "000"+strNum2;
break;
case 2:
strNum2 = "00"+strNum2;
break;
case 3:
strNum2 = "0"+strNum2;
break;
}
int index = strNum2.length()-1;
int tempNum1 = 0;
int tempNum2 = 0;
int tempNum3 = 0;
int tempNum4 = 0;
int tempNum5 = 0;
while(index>=1){
index -- ;
if(index % 4 == 0){
//每个数为一组
tempNum1 = Integer.parseInt(strNum2.substring(index, index+1));
tempNum2 = Integer.parseInt(strNum2.substring(index+1, index+2));
tempNum3 = Integer.parseInt(strNum2.substring(index+2, index+3));
tempNum4 = Integer.parseInt(strNum2.substring(index+3, index+4));
tempNum5 = tempNum4*1 + tempNum3*2+tempNum2*4+tempNum1*8;
resultNum = getOtherNum(tempNum5) +resultNum;
}
}
return resultNum;
}
/**
* 8进制转换16进制
* @param strNum2
*/
public static String eightTurnSixteen(String strNum2){
return twoTurnSixteen(eightTurnTwo(strNum2));
}
/**
* 16进制转换中的特殊处理,需要把大于9的数字转换成字母
* @param tempNum
* @return
*/
public static String getOtherNum(int tempNum){
String tempStr = "";
if(tempNum > 9){
switch(tempNum){
case 10:
tempStr = "A";
break ;
case 11:
tempStr = "B";
break;
case 12:
tempStr = "C";
break;
case 13:
tempStr = "D";
break;
case 14:
tempStr = "E";
break;
case 15:
tempStr = "F";
break;
}
}else{
tempStr = String.valueOf(tempNum);
}
return tempStr;
}
}
输出结果:
十进制数:1314521
十进制转换二进制:101000000111011011001
十进制转换八进制:5007331
十进制转换十六进制:140ED9
二进制转换八进制:5007331
八进制转换二进制:101111011011001
八进制转换十六进制:5ED9
二进制转换十六进制:140ED9
**********************************没有优化程序性能,有时间再改*********************************