/*
十六进制的转换
要求:
1.从键盘输入数据(有输入提示)
2.用自定义方法
增加:
对输入的数,进行8进制和2进制的转换。
*/
import java.util.Scanner;
public class ArrayTest{
public static void main(String[] args){
System.out.print("请输入要转换为16进制的数字:");
Scanner scan=new Scanner(System.in);
int num = scan.nextInt();
System.out.print("转换后的16进制数为:");
getHex(num);
System.out.println();
System.out.print(" 转换后的2进制数为:");
getBinary(num);
System.out.println();
System.out.print(" 转换后的8进制数为:");
getOctal(num);
}
//getHex方法。 完成16进制的转换功能。
//start getHex;
public static void getHex(int num){
char[] chs={‘0‘,‘1‘,‘2‘,‘3‘,‘4‘,‘5‘,‘6‘,‘7‘,‘8‘,‘9‘,
‘A‘,‘B‘,‘C‘,‘D‘,‘E‘,‘F‘};
char[] arr = new char[8];
int p = arr.length; //int类型在内存中是4字节,32个2进制位,对应的十六进制位是8. 每4位对应一位16进制数。
if(num == 0 ){
System.out.print("0");
return ; //此处的return ;当接收的数据为0的时候,结束此方法。
}
while(num != 0 ){
int x = num & 15;
arr[--p] = chs[x]; //在存数的过程中,从最高位开始存。 也就是最先运算出来的数字,存到数组的最后一位。
num = num >>> 4; //将num向右移4个2进制位。 >>>代码无符号右移。>>代表有符号有移。
}
for(int i=p;i<arr.length;i++){ //输出过程是从有效位开始输出。带有0不输出
System.out.print(arr[i]);
}
}
//end getHex
//start getOctal
public static void getOctal(int num){
char[] chs={‘0‘,‘1‘,‘2‘,‘3‘,‘4‘,‘5‘,‘6‘,‘7‘};
char[] arr=new char[11];
int p=arr.length;
if(num == 0){
System.out.print("0");
return ;
}
while(num != 0){
int n=num & 7;
arr[--p] = chs[n];
num = num >>> 3;
}
for(int i=p;i<arr.length;i++){
System.out.print(arr[i]);
}
}
//end getOctal
//start getBinary
public static void getBinary(int num){
char[] chs={‘0‘,‘1‘};
char[] arr=new char[32];
int p=arr.length;
if(num == 0){
System.out.print("0");
return ;
}
while(num !=0){
int n=num & 1;
arr[--p]=chs[n];
num = num >>>1;
}
for(int i=p;i<arr.length;i++){
System.out.print(arr[i]);
}
}
//end getBinary
}