题目:十进制转为十六进制
十进制转为二进制
/**
进制转换
author: Zelmira
date: 2019/8/21
*/
运行结果:
代码:(一共写了5个方法)
class JinZhi{
public static void main(String[] args){
System.out.println("6转二进制--------");
toBin(6);
System.out.println();
System.out.println("-6转二进制--------");
toBin2(-6);
System.out.println();
System.out.println("60转十六进制--------");
toHex(60);
toHex2(60);
System.out.println();
System.out.println("-60转十六进制--------");
toHex3(-60);
}
/*
十进制——十六进制
查表法:
0 1 2 3 4 5 6 7 8 9 A B C D E F ==十六进制中的元素
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
将所有的元素临时存储起来,建立对应关系
每一次&15后的值作为索引去查建立好的表,就可以找对应的元素
这样比 -10+‘a’简单的多
可以通过数据的形式来定义
发现结果是反过来的,使用数组来存储并进行反转
(可计算负数)
*/
public static void toHex3(int num){
//定义一个临时容器
char[] arr=new char[8];
//定义角标
int pos=0;
char[] chs = {'0','1','2','3'
,'4','5','6','7'
,'8','9','A','B'
,'C','D','E','F'
};
while(num!=0){
int x=num&15;
arr[pos]=chs[x];
pos++;
//System.out.println(chs[x]);
num=num >>> 4;
}
for(int i=pos-1; i>=0; i--){
System.out.print(arr[i]);
}
System.out.println();
}
//十进制——六进制
/*
60在内存中的二进制格式:0000-0000 0000-0000 0000-0000 0011-1100
将数转二进制后,&5,得到第一个数,然后右移四位,&5,得到第二位数,然后右移四位...循环
得到的数>9时:=10为A,=11为B,=12为C,=13为D,=14为E,=15为F
(可计算负数)
*/
public static void toHex(int num){
StringBuffer bu = new StringBuffer();
for(int i=0; i<8; i++){
int temp = num & 15;
if(temp>9){
//System.out.println((char)(temp-10+ 'A'));
bu.append((char)(temp-10+ 'A'));
}else{
//System.out.println(temp);
bu.append(temp);
}
num = num >>> 4;
}
System.out.println(bu.reverse());
}
//十进制——十六进制(可计算负数)
public static void toHex2(int num){
StringBuffer bu = new StringBuffer();
for(int i=0; i<8; i++){
int x=num&15;
num=num>>>4;
String res="";
if(x>9){
switch(x){
case 10:
res="A";
break;
case 11:
res="B";
break;
case 12:
res="C";
break;
case 13:
res="D";
break;
case 14:
res="E";
break;
case 15:
res="F";
break;
}
}else{
res=""+x;
}
bu.append(res);
}
System.out.println(bu.reverse());
}
//十进制——二进制(只适用于正数)
public static void toBin(int num){
StringBuffer bu=new StringBuffer();
while(num>0){
int x=num%2;
num=num/2;
//System.out.println(x);
bu.append(x);
}
System.out.println(bu.reverse());
}
//十进制——二进制(可计算负数)
public static void toBin2(int num){
//定义一个临时容器
char[] arr=new char[32];
//定义角标
int pos=0;
char[] chs = {'0','1'};
while(num!=0){
int x=num&1;
arr[pos]=chs[x];
pos++;
//System.out.println(chs[x]);
num=num >>> 1;
}
for(int i=pos-1; i>=0; i--){
System.out.print(arr[i]);
}
System.out.println("");
}
}