计算机中数值以补码形式存放
原码
反码:符号位不变,数值位在原码上取反
补码:符号位不变,数值为在原码上取反并加一(反码 + 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);
}