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。

                  十六进制 的值和数组下标的规律:

                  

                因此可以设定数组为:

                 

              当然,有时,数据取得过多时候,则需要使用一个数组保存,所取得值,可以定义另一个数组:

扫描二维码关注公众号,回复: 2605899 查看本文章

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]);
                }
    }

}
 

猜你喜欢

转载自blog.csdn.net/qq_39645768/article/details/81216426