方法一:
1、以60为例:(假设为32位)
60 除以 16 商 3 余。。。。。。。。12
3 除以 16 商 0 余。。。。。。。。。3
2、然后将余数倒过来,两位数的余数则转化为字母。
数字与字母对应:
3、60的十六进制为:0000003C10-----A
11-----B
12-----C
13-----D
14-----E
15-----F
方法二:
通过&运算和 右移运算来求解:
步骤如下:
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