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

来源:互联网 发布:淘宝卖家店铺被冻结 编辑:程序博客网 时间:2024/05/29 17:52

方法一:

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

原创粉丝点击