---------------------- ASP.Net+Android+IO开发S、.Net培训、期待与您交流! ----------------------
说明:本次练习采用移位的方法针对int类型数进行转换。
移位思想将十进制数转换二进制、八进制、十六进制数的思路:
计算机以二进制形式存储数值,所以进制的转换都是对二进制数进行操作。
所谓的类型转换实际上是将计算机存储的二进制数按位(进制不同位转换不同,2转8:3位代表一位;2转164位代表一位)转换成字符(查找我们自己建好的字符表)然后将不同位的字符存放在字符数组中,最后将字符数组打印出来。
拿十六进制为例:
(1)将待转换数num按位与(&)上15(0000 0000 0000 0000 0000 0000 0000 1111)结果存于临时变量temp中即得到了num的16进制形式的最低位数值。得到数值后我们就可以通过建好的十六进制数值表找到其对应的十六机制字符存入临时容器(字符数组)。
(2)将num右移4位,重复(1)操作,可以取得num的16进制形式的下一个低位数值。循环多次直至num没有有效数值(即等于0)。
(3)为了便于操作临时容器(字符数组)可以建立一个数组指针。
二进制和八进制转换思路和十六进制相同,只是按位与(&)的数不同(二进制:1;八进制:7;)和移位位数不同(二进制:1;八进制:3)。
最后将其相同代码段抽取成方法tans(int num,int base,int offset),num为待转换数;base为&的数;offset为移位位数。源代码如下:
/*
十进制数转换成 二进制、八进制、十六进制数(优化)。
*/
public class ArrayTest2{
public static void main(String[] args){
toBin(60);
toOctal(60);
toHex(60);
}
public static void toBin(int num){
tans(num,1,1);
System.out.println();
}
public static void toOctal(int num){
tans(num,7,3);
System.out.println();
}
public static void toHex(int num){
tans(num,15,4);
System.out.println();
}
public static void tans(int num, int base, int offset){
if(num == 0) {
System.out.println(0);
return ;
}
char[] chs = new char[]{'0','1','2','3','4', //建表
'5','6','7','8','9',
'A','B','C','D','E','F'};
char[] arr = new char[32]; //建立一个临时容器
int pos = arr.length;
while(num != 0){
int temp = num & base; //取低位数。
arr[--pos] = chs[temp]; //存入临时容器。
num = num >>> offset; //移位,二进制:1;八进制:3;十六进制:4;
}
for(int i=pos; i<arr.length; i++){ //从有效位遍历输出。
System.out.print(arr[i]);
}
}
}
输出结果:
111100
74
3C