/*
练习:进制转换
*/
class NumDemo{
/*
十进制-->二进制(递归)
*/
public static void toBin(int num){
if(num/2!=0)
toBin(num/2);
System.out.print(num%2);
}
/*
十进制-->二进制(非递归)
*/
public static void toBin_2(int num){
StringBuffer sb=new StringBuffer();
while(num>0){
sb.append(num%2);
num=num/2;
}
System.out.println(sb.reverse());
}
/*
十进制-->二进制(负数都可以算)
*/
public static void toBin_3(int num){
//定义二进制的表
char[] chs={'0','1'};
//定义一个临时存储容器
char[] arr=new char[32];
//定义一个操作数组的指针
int pos=arr.length;
while(num!=0){
int temp=num&1;
arr[--pos]=chs[temp];
num=num>>>1;
}
for(int x=pos;x<arr.length ;x++){
System.out.print(arr[x]);
}
}
/*
十进制-->十六进制
*/
public static void toHex(int num){
StringBuffer sb=new StringBuffer();
for(int x=0;x<8;x++){
int temp=num&15;
if(temp>9)
sb.append((char)(temp-10+'A'));
else
sb.append(temp);
num=num>>>4;
}
System.out.println(sb.reverse());
}
/*
查表法来获取内容 将所有元素临时存储起来,建立对应关系。
每一次&15后的值作为索引去查建立好的表,就可以找对应的元素。
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
*/
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;
//System.out.print(chs[temp]);
arr[--pos]=chs[temp];
num=num>>>4;
}
for(int x=pos;x<arr.length;x++){
System.out.print(arr[x]);
}
}
public static void main(String[] args){
toBin(6);
System.out.println();
toBin_2(6);
toHex(-60);
toHex_2(60);
System.out.println();
toBin_3(-6);
}
}