第一次优化
去零。主要是优化二进制的0000,当为其时,不在进行运算。
/**
* 优化:十进制转十六进制第一次优化
* @author Shoulder
*
*/
public class DecimalToHex1 {
public static void main(String[] args) {
String str_hex = toHex(1987);
System.out.println(str_hex);
//System.out.println(Integer.toHexString(200));
}
/**
* 十进制转十六进制
* @param num 指定一个int类型的数字,对其进行十进制转十六进制
* @return temp
*/
public static String toHex(int num)
{
int temp = 0;
char[] arr = new char[8]; //声明数组当容器,存储转换后的十六进制位,为倒序的
/*
* 逆序输出,怎么去掉前面的0?二进制有效位是带1的,当右移4位后,所有有效位执行完,剩下的0可以不执行,比如3,二进制00000011
* 当右移第一次时,发现后边的全为0,即程序中的num为0,所以我们优化后的判断为num!=0时,由于没有了i,所以我们需声明变量index
* 来给arr数组记录值。
*/
//for(int i=0;i<8;i++)
int index = arr.length;
while(num!=0)
{
temp = num&15;
if(temp>9)
arr[--index] = (char)(temp-10+'A');
else
arr[--index] = (char)(temp+'0');
num = num>>>4;
}
// System.out.println(index); //将index传过去,从index开始记录即可
return toString(arr,index);
}
/**
* 将字符数组转换为字符串
* @param arr 定义一个char类型的数组
* @return temp 返回字符串类型
*/
/*public static String toString(char[] arr)
{
String temp = "";
for(int i=0;i<arr.length;i++) //将其逆序输出。有空位,怎么去掉?
{
temp+=arr[i];
}
return "0x"+temp;
}*/
public static String toString(char[] arr,int index)
{
String temp = "";
for(int i = index;i<arr.length;i++) //将其逆序输出
{
temp+=arr[i];
}
return "0x"+temp;
} }
第二次优化
查表。主要是通过数组char[] chs = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};,根据取出每位的值,和表进行对比,然后输出。
char[] chs = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
char[] arr = new char[8]; //声明数组当容器,存储转换后的十六进制位,为倒序的
int index = arr.length;
while(num!=0)
{
temp = num&15;
arr[--index] = chs[temp];//从表查,然后放入数组arr中
num = num>>>4;
}