这种情况正是因为
byte被晋升到
int前执行按位运算。
int-128表示为:
11111111 11111111 11111111 10000000
因此,向右移至7或8位仍保留第7位1,因此结果缩小为负值
byte。
比较:
System.out.println((byte) (b >>> 7));// -1System.out.println((byte) ((b & 0xFF) >>> 7)); // 1
通过
b & 0xFF,在移位之前清除所有最高位,因此按预期产生结果。

这种情况正是因为
byte被晋升到
int前执行按位运算。
int-128表示为:
11111111 11111111 11111111 10000000
因此,向右移至7或8位仍保留第7位1,因此结果缩小为负值
byte。
比较:
System.out.println((byte) (b >>> 7));// -1System.out.println((byte) ((b & 0xFF) >>> 7)); // 1
通过
b & 0xFF,在移位之前清除所有最高位,因此按预期产生结果。