java排序法之查表法——实现进制转换
查表法的用法:
当元素过多,并呈现一定数组和元素之间有着对应的关系,再数组的下标与元素也有关系
十六进制转换的思路:
假设设置一个数字为int num = 60;在计算机中的二进制则表示:0000-0000 0000-0000 0000-0000 0011-1100。
当转变为16进制时,则应该&15,而15在二进制则表示0000-0000 0000-0000 0000-0000 0000-1111。如下图所示:
得到12后,然后在右移4位(右移四位是因为二进制中每4位的值换算成十进制最大值为15),既(12>>>4)再和15去计算,得到数字3,而12在十六进制表示C,因此结果就为3C。
十六进制 的值和数组下标的规律:
因此可以设定数组为:
当然,有时,数据取得过多时候,则需要使用一个数组保存,所取得值,可以定义另一个数组:
char []str = new char[8].为何是8位,因为0000-0000 0000-0000 0000-0000 0011-1100最多只能移8次。在
设定一个指针去保存值。
代码实现:
实现二进制,八进制的转换:
同样的原理,二进制只要与1相计算,并右移一位,8进制只要与7相计算,再右移三位。
实现代码:
package test;
import java.util.Scanner;
public class jinzhi {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个数字:");
int num = sc.nextInt();
if(num == 0) {
System.out.println("所有的进制结果都为0");
return;
}
Hexadecimal(num);
Octal(num);
Binary(num);
}
private static void Hexadecimal(int num) {
// TODO Auto-generated method stub
System.out.print("十六进制的结果为:");
all(num,15,4);
System.out.println();
}
private static void Octal(int num) {
// TODO Auto-generated method stub
System.out.print("八进制的结果为:");
all(num,7,3);
System.out.println();
}
private static void Binary(int num) {
// TODO Auto-generated method stub
System.out.print("二进制的结果为:");
all(num,1,1);
System.out.println();
}
public static void all(int num,int jisuan,int move ) {
//设定数组保存16进制中所有的数字
char [] arr = {'0','1','2','3',
'4','5','6','7',
'8','9','A','B',
'C','D','E','F'};
//定义一个数组保存需要的值
char [] str = new char[8];
//定义str的指针
int strIndex = str.length-1;
while(num!=0) {
int index = num &jisuan;
//从数组的最后一位开始保存
str[strIndex--] = arr[index];
num = num >>> move;
}
//输出时,直接从str的指针开始执行,目的是为了,去除无用的值。
for(int x = strIndex+1;x<=str.length-1;x++) {
System.out.print(str[x]);
}
}
}