Java Bitwise或Byte和Int之间

bra*_*ber 5 java binary bit-manipulation twos-complement sign-extension

我试图byte在Java中执行按位或值.

例如,我正在运行:

byte b = (byte)0b11111111;
int result = 0 | b;
Run Code Online (Sandbox Code Playgroud)

我的预期结果是0b00000000 00000000 00000000 11111111,或255.但是,我收到了-1,或者0b11111111 11111111 11111111 11111111.

我假设Java 在执行操作之前将我byte转换为intvia符号扩展名,我只是好奇是否有办法在不使用位掩码(0b11111111)的情况下获得我想要的结果.

Joh*_*ica 7

使用一个位掩码是标准溶液转换时禁用符号扩展byte到一个int.你只需要接受这片Java丑陋.

int result = 0 | (b & 0xFF);
Run Code Online (Sandbox Code Playgroud)