- 什么时候使用数组呢? 如果数据出现了对应关系, 而且对应关系的一方是有序的数字编号, 并作为角标使用. 这时,就必须要想到数组的使用. 也就是将这些数据存储到数组中, 根据运算的结果作为角标, 直接去查数组中对应的元素即可.
这种方式称为 查表法 .
需求: 获取一个整数的十六进制表现形式public static void toHex(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' }; /* 一会查表会查到比较多的数据,数据一多, 就先存储起来, 在进行操作. 所以定义一个数组, 当作临时容器. 而 int 类型, 四个字节,占32个二进制位, 四个二进制位代表一个十六进制位, 所以临时容器长度为 8 */ char[] arr = new char[8]; int pos = 0; while(num!=0) { int temp = num&15; arr[pos++] = chs[temp]; num = num >>> 4; // 使用无符号右移 } // 将结果打印 System.out.println("pos="+pos); for(int x = pos-1; x>=0; x--) { System.out.print(arr[x]); }}代码改进为任意进制:// 十进制 --\> 十六进制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);}public static void trans(int num, int base, int offset){ if(num == 0) { System.out.println("0"); return; } char[] chs = { '0','1','2','3','4','5', '6','7','8','9','A','B', 'C','D','E' }; char[] arr = new char[32]; // 二进制最长 int pos = 0; while(num != 0) { int temp = num & base; // 二进制与 1,八进制与 7, arr[post++] = chs[temp]; num = num >>> offset; // 二进制右移 1 位, 八进制右移 3 位 } // 输出结果 for(int x = pos - 1; x>=0; x--) { System.out.print(arr[x]); } System.out.println(); // 输出完成后,换行}
参考资料: