*不同进制的数据表现形式:
1.二进制:由0,1组成;以0b开头或者以B结尾;
2. 八进制:由0,1,2,3,4,5,6,7组成,以0开头;
3.十进制:由0,1,2,3,4,5,6,7,8,9组成,默认为为十进制数据;
1.二进制:由0,1组成;以0b开头或者以B结尾;
2. 八进制:由0,1,2,3,4,5,6,7组成,以0开头;
3.十进制:由0,1,2,3,4,5,6,7,8,9组成,默认为为十进制数据;
4.十六进制:由0,1,2,3, 4,5,6,7,8,9,a,b,c,d,e,f(字母大小写都可以),以0x开头
任意进制之间的转换,java代码。
package 第一章_程序设计基础;
import java.util.Scanner;
public class E201_01_08进制转换器{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
boolean b = true;
boolean b1 = false;
do{
System.out.println("*----------------进制转换器-----------------*");
System.out.print("*A:十进制 => 二进制\t\t");
System.out.println("B:二进制 => 十进制 *");
System.out.print("*C:十进制 => 八进制\t\t");
System.out.println("D:八进制=>十进制 *");
System.out.print("*E:十进制 => 十六进制\t");
System.out.println("F:十六进制=> 十进制 *");
System.out.print("*G:二进制 => 八进制\t\t");
System.out.println("H:八进制 => 二进制 *");
System.out.print("*I:二进制 => 十六进制\t");
System.out.println("J:十六进制 => 二进制*");
System.out.println("*K:退出");
System.out.print("请选择(A-K):");
char c = sc.next().charAt(0);
int num;
String sum= "";
switch (c){
case 'A':
System.out.print("请输入一个十进制的数:");
num = sc.nextInt();
for(int i = tenToTwo(num).length()-1;i>=0;i--){
sum+=tenToTwo(num).substring(i,i+1);
}
System.out.println(num+"(10)→"+sum+"(2)");
break;
case 'B':
System.out.print("请输入一个二进制的数:");
String twoten = sc.next();
System.out.println(twoten+"(2)→"+twoToTen(twoten)+"(10)");
break;
case 'C':
System.out.print("请输入一个十进制的数:");
int teneight = sc.nextInt();
for(int i = tenEight(teneight).length()-1;i>=0;i--){
sum+=tenEight(teneight).substring(i,i+1);
}
System.out.println(teneight+"(10)→"+sum+"(8)");
break;
case 'D':
System.out.print("请输入一个八进制的数:");
String eightten = sc.next();
System.out.println(eightten+"(8)→"+eightTen(eightten)+"(10)");
break;
case 'E':
System.out.print("请输入一个十进制的数:");
int ten = sc.nextInt();
for(int i = Ten(ten).length()-1;i>=0;i--){
sum+=Ten(ten).substring(i,i+1);
}
System.out.println(ten+"(10)→"+sum+"(16)");
break;
case 'F':
System.out.print("请输入一个十六进制的数:");
String sixteen = sc.next();
System.out.println(sixteen+"(16)→"+sixTeen(sixteen)+"(10)");
break;
case 'G':
System.out.print("请输入一个二进制:");
String two1 = sc.next();
int num1 =twoToTen(two1);//二进制到十进制
for(int i = tenEight(num1).length()-1;i>=0;i--){
sum+=tenEight(num1).substring(i,i+1);
}
System.out.println(two1+"(2)→"+sum+"(8)");
break;
case 'H':
System.out.print("请输入一个八进制的数:");
String eight = sc.next();
int eight1 =eightTen(eight);
for(int i = tenToTwo(eight1).length()-1;i>=0;i--){
sum+=tenToTwo(eight1).substring(i,i+1);
}
System.out.println(eight+"(8)→"+sum+"(2)");
break;
case 'I':
System.out.print("请输入一个二进制的数:");
String two = sc.next();
int two2 =twoToTen(two);
for(int i = Ten(two2).length()-1;i>=0;i--){
sum+=Ten(two2).substring(i,i+1);
}
System.out.println(two+"(2)→"+sum+"(16)");
break;
case 'J':
System.out.print("请输入一个十六进制:");
String sixtwo = sc.next();
int tensix = sixTeen(sixtwo);
for(int i = tenToTwo(tensix).length()-1;i>=0;i--){
sum+=tenToTwo(tensix).substring(i,i+1);
}
System.out.println(sixtwo+"(16)→"+sum+"(2)");
break;
case 'K':
do {
System.out.print("确认退出(Y/N):");
char out = sc.next().charAt(0);
switch (out) {
case 'Y':
b = false;
b1=false;
break;
case 'N':
b1=false;
break;
default:
b1=true;
System.out.println("**********字母输入有误!请重新输入*************");
}
}while(b1);
break;
default:
System.out.println("************输入有误!请重新输入*************");
}
}while(b);
}
//A.十进制>二进制
private static String tenToTwo(int num){
String s = "";
while(num>=2) {
if (num % 2 == 0){
s=s+"0";
}else{
s=s+"1";
}
num=num/2;
if(num<2){
s+="1";
}
}
return s;
}
//B.二进制>十进制
private static int twoToTen(String num){
int sum = 0;
for(int i = 0;i<num.length();i++){
sum+=(int)Integer.parseInt(num.substring(i,i+1))*Math.pow(2,num.length()-1-i);
}
return sum;
}
//C.十进制转换为八进制
private static String tenEight(int teneight){
String s = "";
while(teneight>=8) {
for(int i =0;i<8;i++){
if(teneight%8==i){
s+=Integer.toString(i);
break;
}
}
teneight=teneight/8;
if(teneight<8){
s+=Integer.toString(teneight);
}
}
return s;
}
//D.八进制转换为十进制
private static int eightTen(String num){
int sum = 0;
for(int i = 0;i<num.length();i++){
sum+=(int)Integer.parseInt(num.substring(i,i+1))*Math.pow(8,num.length()-1-i);
}
return sum;
}
//E.十进制转换为十六进制
private static String Ten(int num){
String s = "";
String arr[] = {"0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"};
if(num<16){
s=arr[num%16];
}
while(num>=16) {
for(int i =0;i<16;i++){
if(num%16==i){
s+=arr[i];
break;
}
}
num=num/16;
if(num<16){
s+=arr[num%16];
}
}
return s;
}
//F十六进制转换为十进制
private static int sixTeen(String num){
int sum = 0;
for(int i = 0;i<num.length();i++){
String ch = num.substring(i,i+1);
if(ch.equals("a")){
ch="10";
}else if(ch.equals("b")){
ch="11";
}else if(ch.equals("c")){
ch="12";
}else if(ch.equals("d")){
ch="13";
}else if(ch.equals("e")){
ch="14";
}else if(ch.equals("f")){
ch="15";
}
sum+=(int)Integer.parseInt(ch)*Math.pow(16,num.length()-1-i);
}
return sum;
}
}