二进制十进制整数的转换

509 阅读2分钟
原文链接: since1986.github.io

进制转换在上大学时就学了,时到现在忘得已经差不多了,正好这两天看了几篇关于二进制的文章,顺便也就复习了一下,整数的十进制转二进制用辗转相处,二进制转十进制用按位乘与2的位数次方。
另外在将二进制转为十进制时需要用到power运算,我是直接用的位运算,当然也可以用Math.pow(),一样能实现。

public class Test4 {

    public static void main(String[] args) {

        /*
        十进制转二进制
        辗转相除:
        666 / 2 = 333 余 0
        333 / 2 = 166 余 1
        166 / 2 = 83 余 0
        依次类推直到相除结果为0
         */
        int decimal = 666;
        while (decimal != 0) { //
            System.out.print(decimal % 2);
            decimal /= 2;
        }
        System.out.println();

        /*
        二进制转十进制
        从最低位开始,每一位 * 基数(二进制基数就是2)的位数次方 累加
        0101100101

        从最右侧开始 (1 * 2的0次方) + (0 * 2的1次方) + (1 * 2的2次方) + ...
         */
        int[] binary = {0, 1, 0, 1, 1, 0, 0, 1, 0, 1};
        int result = 0;
        for (int index = 0; index < binary.length; index++) {
            /*
            Java中 2的n次方实际上就是1左移n位
            00000000000000000000000000000001 也就是int型的1 左移0位后(也就是没移动) 00000000000000000000000000000001 还是int型的1
            00000000000000000000000000000001 左移一位后变为 00000000000000000000000000000010 也就是int型的2
            00000000000000000000000000000001 左移2位后变为 00000000000000000000000000000100 也就是int型的4
            以此类推
            */
            result += binary[index] * (1 << index);
        }
        System.out.println(result);
    }
}