查表法:十进制转十六进制 将所有的元素临时存储起来,建立对应关系,每一次&15的值都作为引索去查建立好的表,就可以找对应得元素。这比-10+‘a’简单的多 这个表可以通过数组的形式来定义。 分析: 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——角标 classChecktoHex { public static void main(String[] args) { toHex(60); } publicstatic void toHex(int num) { char[] chs={'0','1','2','3', '4','5','6','7', '8','9','A','B', 'C','D','E','F'}; for(int x=0;x<8;x++) { int temp=num&15; System.out.println(chs[temp]); num=num>>>4; } } 发现终于出结果了,但是结果是反着的,想要正过来,可以通过StringBufferreverse功能来完成,但是这个工具还没有学习,所以可以使用已经学过的容器,数组来完成反转存储 classChecktoHex { public static void toHex(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 pos=arr.length; while (num!=0) { int temp=num & 15; arr[--pos] = chs[temp]; num = num >>> 4; } System.out.println("pos="+pos); for (int x=pos;x<arr.length ;x++) { System.out.print(arr[x]+","); } } public static void main(String[] args) { toHex(60); } } 同理:编写十转二的查表法程序 class ChecktoBin { public static void toBin(int num) { char[] chs={'0','1'}; char[] arr=new char [32]; int pos=arr.length; while (num!=0) { int temp=num & 1; arr[--pos] = chs[temp]; num = num >>> 1; } //System.out.println("pos="+pos); for (int x=pos;x<arr.length ;x++) { System.out.print(arr[x]+","); } } public static void main(String[] args) { toBin(-6); } } 由于通过查表法转二进制和十六进制有很多的相似之处,所以,我们可以从里面提取出一些共同的部分定义其功能! classTranslation { if(num==0) { System.out.println(0); return; } public static void main(String[] args) { toOct(32); } /* 十进制-->二进制 */ public static void toBin(int num) { trans(num,1,1); } /* 十进制-->八进制 */ public static void toOct(int num) { trans(num,7,3); } /* 十进制-->十六进制 */ public static void toHex(int num) { trans(num,15,4); } public static void trans(int num,int base,intoffset) { 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]); } } }
|