我正在尝试在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
问题是我该如何解决?
答案 0 :(得分:8)
这里发生的是binary numeric promotion。在执行操作之前,Java会将大多数二元运算符的操作数类型(包括bitwise或|
运算符)提升为至少int
。 bitArray[i] | bitMask[j]
的结果是int
,而不是byte
。
操作完成后,您必须将其显式转换回byte
。
bitArray[i] = (byte) (bitArray[i] | bitMask[j]);
此外,使用compound operator |=
表示您不必返回byte
。
bitArray[i] |= bitMask[j];