Java 中字节的 OR-ing 问题?

Issues with OR-ing with bytes in Java?

假设我在 java

中有以下代码
byte t = (byte) 0b10001000;
byte z = 0b00000000;
z = (byte) (t|z);

你认为输出是 10001000,但它最终在字符串表示中是 -1111000,- 符号当然是第一个 1,所以它是 11111000。如果我执行相同的代码但最后一个将 z 中的位设为 1,例如00000001,我执行相同的操作,得到 -1110111 或 11110111。我认为这是由于负符号字节 t 的一些转换问题造成的。有什么办法可以避免这种情况吗?有没有办法让 10000000 在 OR 运算中与 01000000 一样工作?

Java 没有无符号类型,因此当您使用二进制符号并设置符号位时,事情不会像您预期的那样进行;-)

要模拟无符号类型,您需要使用更大的尺寸。