/*
查表法:将所有的元素临时存储起来,建立对应关系。
十六进制:每一次&15后的值作为索引去查建立好的表,就可以找到对应的元素。
那么这个表怎么建立呢?可以通过数据的形式来定义。
查表法优化:将二进制、十六进制之间的共性提取出来建立方法。
*/
class ArrayBinHexYouHua
{
public static void main(String[] args)
{
toBin(6);
toBin(-1);
toBa(60);
toHex(60);
}
/*
建表:发现结果出来了,却是反着的,可以通过StringBuffer reverse功能来完成。
所以可以使用已经学过的容器:数组来完成存储。
*/
public static void trans(int num,int base,int offset) //num:传入数值。base:与“&”二进制基数。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]; //定义一个临时存储容器。int类型:4个字节*8位/字节=32个字节。
int pos = arr.length; //定义一个操作数组的指针。
while(num!=0)
{
int temp = num & base;
arr[--pos] = chs[temp];
num = num >>> offset;
}
//System.out.println("pos="+pos);
for(int x=pos;x<arr.length;x++) //存储数据的arr数组遍历。
{
System.out.print(arr[x]);
}
}
/*
十进制-->二进制。与1,偏移1位。
*/
public static void toBin(int num)
{
trans(num,1,1);
System.out.println();
}
/*
十进制-->八进制。与7,偏移3位。
*/
public static void toBa(int num)
{
trans(num,7,3);
System.out.println();
}
/*
十进制-->十六进制。与15,偏移4位。
*/
public static void toHex(int num)
{
trans(num,15,4);
System.out.println();
}
} |
|