使用byte和int在Java中进行按位操作

ort*_*lis 4 java bitwise-operators primitive-types

我试图在java中做一些按位操作

我有2个数组:

byte[] bitArray;
final  byte [] bitMask = {1,2,4,8,16,32,64,-128};
Run Code Online (Sandbox Code Playgroud)

然后我尝试在|一个字节中的bitArray一个字节mask.

bitArray[i] = bitArray[i] | bitMask[j]
Run Code Online (Sandbox Code Playgroud)

问题是我遇到了编译器错误.

"错误可能丢失精度"找到int所需的字节

问题是如何解决它?

rge*_*man 8

这里发生的是二进制数字促销.Java将|至少int在执行操作之前为大多数二元运算符(包括按位运算符或运算符)提升操作数的类型.结果bitArray[i] | bitMask[j]int,而不是byte.

byte操作完成后,必须将其显式转换回a .

bitArray[i] = (byte) (bitArray[i] | bitMask[j]);
Run Code Online (Sandbox Code Playgroud)

此外,使用复合运算符|=意味着您不必强制转换为byte.

bitArray[i] |= bitMask[j];
Run Code Online (Sandbox Code Playgroud)