我正在尝试解决此问题:我有一个字节值(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/

10-12 05:45