java进制转换


二进制在计算机中的表示

  • 一个N位的二进制数由1位符号位和N-1位数据位组成,正数符号位为0,负数符号位为1
  • 二进制数在计算机中是以补码的形势存在的,补码的定义为:
    • 对于正数,补码与原码相同
    • 对于负数,符号位不变,数据位取反,再加一

举例(32位正数为例):

  • 20
    • 原码:0000 0000 0000 0000 0000 0000 0001 0100
    • 反码:0000 0000 0000 0000 0000 0000 0001 0100
    • 补码:0000 0000 0000 0000 0000 0000 0001 0100
  • -20
    • 原码:1000 0000 0000 0000 0000 0000 0001 0100
    • 反码:1111 1111 1111 1111 1111 1111 1110 1011
    • 补码:1111 1111 1111 1111 1111 1111 1110 1100

进制转换方法

  1. 十进制转换为其他进制
public class Main {
    public static void main(String[] args) throws Exception {
        //转换为二进制(输出补码,省略0)
        System.out.println(Integer.toBinaryString(2333));

        //转换为16进制
        System.out.println(Integer.toHexString(2333));

        //转换为八进制
        System.out.println(Integer.toOctalString(2333));
    }
}

结果:

  1. 其他进制转换为十进制

在Java代码中,默认的整数进制就是十进制,就算你定义了一个其他进制的数,在输出或者运算时都是按照十进制来的,不需要刻意转换:

public class Main {
    public static void main(String[] args) throws Exception {
        int int16=0xfff;
        int int2=0b1001;
        System.out.println(int2);
        System.out.println(int16);
    }
}

当然,对于没有标识的整形,java中也保留了转换进制的方法:

public class Main {

    public static void main(String[] args) {
        System.out.println(Integer.parseInt("1001", 2));//2进制转换成十进制
        System.out.println(Integer.parseInt("1001", 8));//8进制转换为十进制
        System.out.println(Integer.parseInt("1001", 16));//16进制转换为十进制
    }
}

结果为:

更多推荐

二进制在计算机中的表示,以及java进制转换的方法