实现代码
目录
public class MathHelper {
private final String SYMBOL = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
String toString( long integer,int radix){
if (integer < 0 || radix < 2 || radix > 36) {
throw new RuntimeException("请输入自然数,指定进制输入[2,36]");
}
if (integer == 0) {
return "" + integer;
}
String result = "";
while (integer != 0) {
int r = (int)(integer % radix);
char symbol = SYMBOL.charAt(r);
result = symbol + result;
integer = integer / radix;
}
return result;
}
}
测试代码
public class MathHelperTest {
public static void main(String[] args) {
MathHelper mh = new MathHelper();
String binary = mh.toString(11, 2);
System.out.println(binary);
}
}
测试结果
1011
此方法未考虑负数的问题,可以参考一下我之前写的二进制转换,之前按照计算机组成原理所写的(原码-反码-补码)写的不太好,见谅
特别的
十进制转二进制、八进制、十六进制可以使用包装类中的方法(这种负数也可以)
二进制
public class MathHelperTest {
public static void main(String[] args) {
System.out.println(Integer.toBinaryString(11));
System.out.println(Integer.toBinaryString(-11));
}
}
测试结果
1011
11111111111111111111111111110101
八进制
public static void main(String[] args) {
System.out.println(Integer.toOctalString(11));
System.out.println(Integer.toOctalString(-11));
}
测试结果
13
37777777765
十六进制
public static void main(String[] args) {
System.out.println(Integer.toHexString(11));
System.out.println(Integer.toHexString(-11));
}
测试结果
b
fffffff5