/*
十六进制的转换
要求:
	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
}