public static void main(String[] args) throws IOException {
byte b = -127;
int c = b & 0xff; // 0xff是int类型
System.out.println(c);
}
输出结果为:
-127的二进制为:11111111(由于是负数,所以符号位为1),
存储到计算机需要进行补码,正数补码后为原本的数组,负数补码为除符号位外,都进行取反操作,
补码后,二进制为:10000000,
转换int需要补齐32位,所以变为11111111 11111111 11111111 10000000,(正数补0,负数补1)
由于byte不需要高24位,所以需要 & 0xff进行清零,变为00000000 00000000 00000000 10000000,
进行+1操作,二进制为:00000000 00000000 00000000 10000001,
这里10000001并不是负数,由于要转换为int类型,int为32位,所以最高位为0,
转换为十进制后,就是129。