Java

Java 基础 之 进制转换

2019-07-26  本文已影响0人  蓉漂里的小白

一:进制

进制是计算机中数据的一种表示方法。 N进制的数可以用0~(N-1) 的数表示, 超过9的用字母A-F 表示 .
10进制,就是 用 0~9 的数表示,逢10 进 1
16进制,就是 由 0-9,A-F组成, 与10进制的对应关系是:0-9 对应0-9;A-F对应10- 15(字母不区分大小写)
2进制 由 0-1组成
8进制 由 0-7组成

1:n 进制 转十进制

假设我们要将n进制转换为十进制,首先我们从n进制的右边为第一位数(从低位到高位),其权值是n的0次方,第二位是n的1次方,依次递增下去,把最后的结果相加的值就是十进制的值了。
公式:
(xyz)n = x * n ^ 2 + y * n ^1 + z * n ^0
(101)2 = 1 * 2 ^2 + 0 * 2^1 + 1 * 2^0 = 5
(101)8 = 1 * 8 ^2 + 0 * 8^1 + 1 * 8^0 = 65
(101)16 = 1 * 16 ^2 + 0 * 16^1 + 1 * 16^0 = 257

2:十 进制 转 n 进制

假设我们要将十进制转换为n进制,首先我们十进制除以权值n,依次除下去,直到不能再被除为止,然后将余数从下往上取。

二 : 二进制,八进制,十六进制 转 十进制

Solution 1: 用java提供的api完成转换

    Integer.valueOf(String s, int radix)

Solution 2: 自己写算法实现上面公式

/**
 * 转换2,8,16进制成10进制
 * @param chars 2,8,16进制字符串
 * @param baseNum 2,8,16进制
 * @return 10进制数值
 */
private int calcIntValue(char[] chars, int baseNum) {
        int length = chars.length;
        int value = 0;
        for(char c : chars) {
            value +=  (Integer.valueOf(c) - 48) * Math.pow(baseNum, length - 1);
            length -= 1;
        }
        return value;
}

三: 十进制 转 二进制,八进制,十六进制

Solution 1: 用java提供的api完成转换

    Integer.toBinaryString(int i)
        Integer.toOctalString(int i)
        Integer.toHexString(int i)

Solution 2: 自己写算法实现上面公式

    /**
     * 将10进制转成2,8,16进制
     * @param decimal 10进制数值
     * @param baseNum 2,8,16进制
     * @return 2,8,16进制 串
     */
    private String calcConvertString(int decimal, int baseNum) {
        this.dataStack = new LinkedList<Integer>();
        StringBuilder sbBinary = new StringBuilder();

        int x = 0;
        while (0 != (decimal / baseNum)) {
            x = decimal % baseNum;
            this.dataStack.push(x);

            decimal = decimal / baseNum;
        }

        this.dataStack.push(decimal % baseNum);
        while (null != this.dataStack.peek()) {
            sbBinary.append(this.dataStack.pop());
        }

        return sbBinary.toString();
    }
上一篇下一篇

猜你喜欢

热点阅读