原码、反码、补码

计算机中数值以补码形式存放
原码
反码:符号位不变,数值位在原码上取反
补码:符号位不变,数值为在原码上取反并加一(反码 + 1),为了解决 +0 和 -0 的问题

正数的:原码,反码,补码相同
负数的:原码,反码,补码均不相同


    public static void main(String[] args) {
        // 1 111 1111 原码
        // 1 000 0000 反码
        // 1 000 0001 补码 -127 计算机中存储的是补码
        // 1000 0001 & 1111 1111 = 1000 0001 = 129
        byte a = -127;
        System.out.println(a);

        System.out.println((byte)(a & 0xff));
        int d = a;

        // 1000 0000 0000 0000 0000 0000 0111 1111      -127 原码
        // 1111 1111 1111 1111 1111 1111 1000 0000      -127 反码
        // 1111 1111 1111 1111 1111 1111 1000 0001      -127 32位补码 int
        // 1 000 0001                                   -127 8位补码  byte
        System.out.println(d);

        int c = a & 0xff;
        System.out.println(c);
    }