Java中的按位运算使用byte和int [duplicate]

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (208)

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

我有2个数组:

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

然后我尝试把mask中的一个字节|bitArray一个字节中的。

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

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

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

如何解决它?

提问于
用户回答回答于

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

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

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

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

bitArray[i] |= bitMask[j];

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励