Java | 进制转换 查表法

Part 1 获取一个整数的16进制表现形式

例1:   

    0000-0000 0000-0000 0000-0000  0011-1100 --------60

&  0000-0000 0000-0000 0000-0000  0000-1111 --------15

-----------------------------------------------------------------------------------

      0000-0000 0000-0000 0000-0000  0000-1100 -------12


    >>>             0000-0000 0000-0000 0000-0000  0011-1100--------60>>>4

       &     0000-0000 0000-0000 0000-0000  0000-1111 --------15

-----------------------------------------------------------------------------------------

           0000-0000 0000-0000 0000-0000  0000-1100-------12

十进制数转换成十六进制数为例

 将60与15进行与操作,其值就是60的十六进制的最低位。

 再将60无符号右移4位,再与15进行与操作,其值就是60的十六进制的倒数第二位。

.由上面的例子可以总结出,将一个十进制数转换为十六进制的步骤就是:

将十进制数与15相与,将结果存储到一个数组的最低位。

然后将十进制数右移4位,再与15进行与操作,其值就是该数对应的十六进制的倒数第二位。

再右移4为,与15相与,直到相与结果为0为止。

public static void main(String[] args) {
		toHex(60);
	}

	static void toHex(int num) {
		for (int x = 0; x < 8; x++) { // 整数的16进制最多8位 
			int temp = num & 15;
			if (temp > 9)
				System.out.println((char)(temp - 10 + 'A'));
			else
				System.out.println(temp);
			num = num >>> 4; // 右移4位
		}
	}

Part 2 进制转换-查找表

注意: 如果数据出现了对应关系,而且对应关系的一方是有序的数字编号,并作为 角标使用,这时候必须要想到数组的应用。就可以將這些数据存储在数组中,运結果作為下标查數組中對應的元素就可以,叫做查找法。
    

 0,1,2,3,4,5,6,7,8,9,A, B, C, D, E, F
 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15

public static void main(String[] args) {
		toHex_2(60);//C3
	}

static void toHex_2(int num) {
		if(num==0) {
			System.out.print("0");
			return;   //不写的话还会往下运行
		}
		//定义一个对应关系表
		char[] chs = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
		
//查表会查到比较多的数据  数据一多 就先存储起来 再进行操作  所以定义一个数组 作为临时容器
        char[] arr = new char[8];
        int pos = arr.length;

        while(num!=0)
		{
			int temp = num &15;
			arr[--pos] = chs[temp];
			num=num>>>4;
		}
        for(int x=pos;x<arr.length;x++) {
			System.out.print(arr[x]);
		}
		System.out.println();
}
	

Part 3 二进制、八进制、十六进制的整合

取一个十进制的2、8、16进制的表现形式

public static void main(String[] args) {
		toHex(60);
		toBinary(-6);
		toOctal(26);
	//	System.out.print(Integer.toBinaryString(6));   直接调用二进制转换方法
	}
	//十进制转换为十六进制
	public static void toHex(int num) {
		trans(num,15,4);
	}
    //十进制转换为二进制
	public static void toBinary(int num) {
		trans(num,1,1);
	}
	//十进制转换为八进制
	public static void toOctal(int num) {
		trans(num,7,3);
	}
	
	static void trans(int num,int base,int offset) {
		if(num==0) {
			System.out.print("0");
			return;  
		}
		//定义一个对应关系表
		char[] chs = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
		//查表会查到比较多的数据  数据一多 就先存储起来 在进行操作 所以定义一个数组 临时容器
        char[] arr = new char[32];
        int pos = arr.length;  //定义指针
        
		while(num!=0)
		{
			int temp = num &base;
			arr[--pos] = chs[temp];
			num = num >>> offset;
		}
		for(int x=pos;x<arr.length;x++) {
			System.out.print(arr[x]);
		}
		System.out.println();
	
	
	}

Part 4 查找法的练习题

使用查找法 查找星期数

	public static void main(String[] args) {
		System.out.print(getWeek(6));
		
	}
	static String getWeek(int num) {

		if(num>7 || num<1)
		{
			return "错误的星期";
		}
		String[] weeks = {"","星期一","星期二","星期三","星期四","星期五","星期六","星期日"};
		return weeks[num];
	}
	}
	

猜你喜欢

转载自blog.csdn.net/weixin_40976389/article/details/108513319