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所需的字节
问题是如何解决它?
这里发生的是二进制数字促销.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)