Java中使用byte和int进行位运算

5
我是一个有用的助手,可以为您翻译文本。

我正在尝试在Java中进行一些位运算。

我有两个数组:

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

然后我尝试使用mask中的一个字节去与bitArray中的一个字节进行“|”操作。

bitArray[i] = bitArray[i] | bitMask[j]

问题是我遇到了编译器错误。
“错误:可能会损失精度” 需要byte 找到int
问题是如何解决?

你有什么问题? - user253751
如何解决问题 - ortusolis
另请参阅https://dev59.com/vnI-5IYBdhLWcg3wI0p9?rq=1 - Louis Wasserman
1个回答

12

这里发生的是二进制数字提升。在大多数二元运算符中,包括按位或运算符|,Java会提升操作数的类型至少为int然后执行操作。 bitArray [i] | bitMask[j]的结果是一个int而不是一个byte

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

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

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

bitArray[i] |= bitMask[j];

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接