二进制、八进制、十进制、16进制数之间的转换题型是经常出现的笔试面试题。关于进制之间的转换也有很多好的算法,在Java中Integer类提供了int类型数据的进制转换。
JDK中Integer类提供了把整形数值转换二进制、八进制以及十进制的实现方法。
具体实现分析
1、十进制 转 二进制
public class Test {
final static char[] digits = { '0' , '1' };
public static void main(String[] args) {
int aa =20;
String str = toUnsignedString(aa);
System.out.println(str);
}
private static String toUnsignedString(int i) {
int shift = 1; //每次右移1位
char[] buf = new char[32];
int charPos = 32;
int radix = 1 << shift;
int mask = radix - 1;
do {
buf[--charPos] = digits[i & mask]; //&二进制按位与
i >>>= shift; //无符号右移1位,相当于手算的时候把i除以2,结果再赋予i
} while (i != 0);
return new String(buf, charPos, (32 - charPos)); //截取返回有效部分
}
}
示例中使用了移位操作,关于移位操作点击《Java移位操作》public class DecimalismToOctonary {
final static char[] digits = {
'0' , '1' , '2' , '3' , '4' , '5' ,
'6' , '7' , '8' , '9' , 'a' , 'b' ,
'c' , 'd' , 'e' , 'f' , 'g' , 'h' ,
'i' , 'j' , 'k' , 'l' , 'm' , 'n' ,
'o' , 'p' , 'q' , 'r' , 's' , 't' ,
'u' , 'v' , 'w' , 'x' , 'y' , 'z'
};
public static String toOctonary(int i,int shift) {
char[] buf = new char[32];
int charPos = 32;
int radix = 1 << shift;
int mask = radix - 1;
do {
buf[--charPos] = digits[i & mask]; //&二进制按位与
i >>>= shift; //无符号右移1位,相当于手算的时候把i除以shift,结果再赋予i
} while (i != 0);
return new String(buf, charPos, (32 - charPos));
}
public static void main(String[] args) {
int a = 620;
String str1 = toOctonary(a,1); //偏移1位,转成2进制
String str2 = toOctonary(a,3); //偏移3位,转成8进制(2的3次方)
String str3 = toOctonary(a,4); //偏移4位,转成16进制
System.out.println(str1);
System.out.println(str2);
System.out.println(str3);
}
}
利用一位操作来进行的运算操作更利于计算机的运算,因此效率与我们使用加减乘除之类的运算相比要更好。