博主学生党,在做面试题的时候,偶尔会碰到进制转换的题目,稍微总结了一下个人的做法,发出来供大家参考
一.十进制转为其他进制
1.使用java自带的方法
int decimalNumber = 60;
// 十进制转十六进制,运行结果输出:3c
System.out.println(Integer.toHexString(decimalNumber));
// 十进制转八进制,运行结果输出:74
System.out.println(Integer.toOctalString(decimalNumber));
// 十进制转二进制,运行结果输出:111100
System.out.println(Integer.toBinaryString(decimalNumber));
查看Integer类的api,我们有:
- toBinaryString(int i) :Returns a string representation of the integer argument as an unsigned integer in base 2.
- toHexString(int i) :Returns a string representation of the integer argument as an unsigned integer in base 16.
- toOctalString(int i):Returns a string representation of the integer argument as an unsigned integer in base 8.
2.不使用java自带的方法
首先实现十进制转八进制:
public static void conversion(int number) {
Stack<Integer> stack = new Stack<>();
// 将草稿纸上列竖式的情况转化为代码
while (number != 0) {
stack.push(number % 8);
number /= 8;
}
while (!stack.isEmpty()) {
System.out.print(stack.pop());
}
}
上面使用栈的方式实现了进制的转换,通过不断的对8进行取余,并进行压栈,最后出栈来输出结果
其实可以想到,如果是十进制转为其他十以内的进制,都可以使用这种方法,将上面代码中的8转为替换为其他数字即可
接下来看如何将十进制转为十六进制
主要的难点在于十以后的数字都要变成字母,我们可以使用最简单的方法:
//将0-16输出为0-9,A-F
int temp = 14;
String result = (temp < 9)? temp + "" : (char)(temp - 10 + 'A') + "";
// 这里输出的结果为E
System.out.println(result);
实现了上面的方法,十进制转为十六进制也没有什么难度了:
int decimalNumber2 = 200;
StringBuilder sBuilder = new StringBuilder();
while (decimalNumber2 != 0) {
// &运算,取出该十进制数转为二进制数的最末4位
int temp_number = decimalNumber2 & 15;
// 通过上面提到的方式,转为char,并添加到StringBuilder
String temp_result = (temp_number < 9)? temp_number + "" : (char)(temp_number - 10 + 'A') + "";
sBuilder.append(temp_result);
// 移位操作,去除最末4位
decimalNumber2 = decimalNumber2 >> 4;
}
// 这里输出结果C8
System.out.println(sBuilder.reverse().toString());
二.其他进制转为十进制
这里其他java中Integer类方法有现成的api,可以较少的小伙伴有注意到:
- parseInt(String s, int radix) Parses the string argument as a signed integer in the radix specified by the second argument.
翻译为中文就是:将字符串参数解析为第二个参数指定的基数中的带符号整数。
不多做解释,直接贴代码:
//将十六进制转为十进制
String HexString = "0xfff";
//这里从[2]开始读取字符串
//parseInt 转十六进制 -> 十进制
int decimalNumber3 = Integer.parseInt(HexString.substring(2), 16);
// 这里输出结果:decimalNumber3: 4095
System.out.println("decimalNumber3: " + decimalNumber3);
String OctalNumber = "135";
int decimalNumber4 = Integer.parseInt(OctalNumber, 8);
// 这里输出结果:decimalNumber4: 93
System.out.println("decimalNumber4: " + decimalNumber4);
如果不使用自带的api,自己可以直接通过不断乘基数来获得,较容易实现,这里不做解释