java学习之进制转换(指针思想,重在理解掌握)
/**
*
*/
package com.dreamly.day01;
/**
* @author dreamly
*
*/
public class ArrayTest {
public static void main(String[] args) {
// toBin(6);
// toO(60);
toHex(60);
}
/**
* 十进制转二进制
* @param num
* @param base
* @param offset
*/
public static void toBin(int num) {
trans(num,1,1);
}
/**
* 十进制转八进制
* @param num
* @param base
* @param offset
*/
public static void toO(int num) {
trans(num,7,3);
}
/**
* 十进制转十六进制
* @param num
* @param base
* @param offset
*/
public static void toHex(int num) {
trans(num,15,4);
}
/**
*
* 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
*
* 查表法处理进制转换
* 将所有元素临时存储起来,建立对应关系,每一次&base后的值作为索引去查看建立好的表,就可以找对应的元素
* 这样比-10+'a'简单
*
* 结果是反着的,正过来可以通过stringBuffer reverse功能来完成
* 也可以通过数组容器来完成存储
*
* @param num
* @param base
* @param offset
*/
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','F'};
char[] arr=new char[32]; //实例化时:在堆空间内的默认值初始值是'\u0000',即--空隔
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();
}
}