用数字 & 15得最低四位
>> 有符号右移 开头是1补1 是0补0
>>>无符号右移 开头补0
输出数字对应的十六进制元素:
普通方法:System.out.print((char)(num-10+"A")); //输出数字的十六进制表现形0~9,A~F
查表法:将所有元素临时存储起来,建立对应关系,每次 & 15后的值作为索引去查表,可以找到对应的元素。
char[] chs = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'} ;
十进制转二进制
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;
}
for(int x=pos; x<arr.length; x++)
{
System.out.print(arr[x]);
}
}
十进制转十六进制
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;
}
//存储数据的arr数组遍历。
for(int x=pos;x<arr.length; x++)
{
System.out.print(arr[x]+",");
}
}
将共通地方做成一个函数
/*
十进制-->二进制
*/
public static void toBin(int num)
{
trans(num,1,1);
}
/*
十进制-->八进制
*/
public static void toBa(int num)
{
trans(num,7,3);
}
/*
十进制-->十六进制
*/
public static void toHex(int num)
{
trans(num,15,4);
}
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];
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]);
}
return ;
}