数组(九)--十进制转换为十六进制

4 篇文章 0 订阅
2 篇文章 0 订阅

方法一:

1、以60为例:(假设为32位)

60 除以 16 商 3 余。。。。。。。。12

3  除以 16 商 0 余。。。。。。。。。3

2、然后将余数倒过来,两位数的余数则转化为字母。

数字与字母对应:

10-----A

11-----B

12-----C

13-----D

14-----E

15-----F

3、60的十六进制为:0000003C

方法二:

通过&运算和 右移运算来求解:

步骤如下:

1、先写出60的32位的二进制;

2、为了求出60的最后四位,需要和15的二进制进行&运算,如下图的第一步;

3、然后将60的二进制右移四位,再与15的二进制进行&运算,又可以求出最后四位;

4、如此,循环第3步,就可以每四位对应的十六进制;

5、由于当数字大于9时用字母A,B,C,D,E,F来表示;所以需要把大于9的数字转换为对应的ASCII码值;

6、转换公式为:(char)(temp-10+'A'),其中temp为10,11,12,13,14,15这几个值中的一个;

7、下图为上述步骤的解析,以及程序;


public class Demo14 {

	public static void main(String[] args){
		toHex(60);
		toHex_2(-60);
	}
	
	/*
	 * 十进制--->十六进制
	 */
	public static void toHex(int num){ //这个十六进制的转换的是正数
		StringBuffer ss=new StringBuffer();
		for(int x=0;x<8;x++){    //之所以小于8,是因为32为的十六进制只有8位
			int temp=num & 15;
			if(temp>9)
				//System.out.println((char)(temp-10+'A'));
				ss.append((char)(temp-10+'A'));
			else 
				//System.out.println(temp);
				ss.append(temp);
			num=num>>>4;      //右移四位
		}
		System.out.println(ss.reverse());
	}
	
	public static void toHex_2(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;
		}
//		System.out.println("pos="+pos);
		for(int x=pos;x<arr.length;x++){
			System.out.print(arr[x]);
		}
	}
}



注意:一般情况下右移只需要两个大于号即 >>,但此程序写了三个>>>,是因为如果是负数的时候,它的首位是 1,不论怎么右移都是1,故>>>表示无符号右移,即不考虑符号的影响。


输出为:0000003C

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值