(byte)-1 参与运算时会转换为int,其二进制形式为-1的补码,即32个1。由于32位中的高16位并不会影响结果,所以我们仅仅对低16位来分析。
(byte)-1 & 0xff => 1111111111111111 & 0000000011111111 => 0000000011111111 => 255
(byte)-1 | 0x00 => 1111111111111111 | 0000000000000000 => 1111111111111111 => -1
由于java默认整数类型为int,所以结果会出现超过byte范围的数。