byte 范围 -128~~~127
(16进制)0xFF =(二进制) 1111 1111 = (int)256
解为:
首一位为符号位 -
整体取反码 0000 0000 加1 为0000 0001 为1 加上符号为 (byte) -1
例如 (16进制)0x7F =(二进制) 0111 1111 = (int)127
解为:
首一位为符号位 +
正的补码,反码均为自己 111 1111 为1 加上符号为(byte) 127
(byte)-127 的 127原码 111 1111 反码为 0000 0000 补码加1 为000 0001
加上符号位 1000 0001 即表示(int) 129
(byte) -128的数值128原码 1000 0000 反码为0111 1111 补码加1 为1000 0000
加上符号位(覆盖) 1000 0000 即表示 (int)128
(byte)-1 的 1原码 000 0001 反码为 1111 1110 补码加1 为1111 1111
加上符号位 1111 1111 即表示 (int)255
正的补码,反码均为自己
(byte)1 的 1原码 0000 0001 反码为000 0001 补码为0000 0001
加上符号位 0000 0001 即表示 (int) 1
总结
byte a;
int b;
b=a>=0?a:256+a;
将a作为int类型向控制台输出的时候,jvm作了一个补位的处理,因为int类型是32位所以-1补位后的补码就是1111111111111111111111111 1111 1111(32位),这个32位二进制补码表示的也是-1.
& 0xFF就可以得到 (int)255