【JAVA基础】JAVA进制转换

博主学生党,在做面试题的时候,偶尔会碰到进制转换的题目,稍微总结了一下个人的做法,发出来供大家参考

一.十进制转为其他进制

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,自己可以直接通过不断乘基数来获得,较容易实现,这里不做解释

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值