我正在尝试解决此问题:我有一个字节值(1个字节),并且需要将此值转换为长值(8个字节)。但是我想要的只是将long变量的第一个字节替换为我之前拥有的字节值。
一个例子:
My Byte Value: 11001101
My Long Value: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
What I want: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 11001101
就那么简单!
我正在尝试执行此操作(示例):
byte b = -112;
long l = 0;
l = l | b;
System.out.println(l);
但是我得到的结果是-112!以我的理解,java位或运算符应对long值的第一个字节和该字节值进行“或”运算。相反,or运算符将字节值的2补码表示形式复制到long值中,这不是我想要的。
在这种情况下,我期望的结果是144,因为-112是10010000,考虑无符号值时,它是144。
希望你能理解我。谢谢!
最佳答案
这里发生的是将b
强制转换为long
,这是通过符号扩展来完成的:重复最高有效位(1),因此将7个11111111
字节用作填充。此处的补救方法是使用按位和(&
)显式考虑结果值中的仅8个最低有效位:
l = l | ((long)b & 0xff);
关于java - 了解Java包含或运算符(|),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26518253/