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

时间:2015-03-05 22:29:23

标签: java bitwise-operators primitive-types

我正在尝试在java中执行一些按位操作

我有2个阵列:

byte[] bitArray;
final  byte [] bitMask = {1,2,4,8,16,32,64,-128};

然后我尝试在|中使用bitArray中的一个字节mask bitArray[i] = bitArray[i] | bitMask[j]

{{1}}

问题是我收到编译错误。

“错误可能会导致精度损失” 必填字节 发现int

问题是我该如何解决?

1 个答案:

答案 0 :(得分:8)

这里发生的是binary numeric promotion。在执行操作之前,Java会将大多数二元运算符的操作数类型(包括bitwise或|运算符)提升为至少intbitArray[i] | bitMask[j]的结果是int,而不是byte

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

bitArray[i] = (byte) (bitArray[i] | bitMask[j]);

此外,使用compound operator |=表示您不必返回byte

bitArray[i] |= bitMask[j];