优化:十进制转十六进制

第一次优化

去零。主要是优化二进制的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;
		}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值