包含2个有符号半字节到2个有符号整数的字节

时间:2019-05-26 02:25:49

标签: java

由于某种原因,我在StackOverflow上找不到此问题的任何答案。如果已经回答了,请将我指向重复的帖子。谢谢!

我有一个对信号进行增量编码并将2个4位增量打包为byte的设备。我正在尝试通过将byte的高4位和低4位分成两个单独的带符号的ints来解码Java中的信号。

例如:

byte packedByte = (byte) 0x0FF; // should represent the value -1, -1 in twos complement

int upper = packedByte >> 4; // upper byte is easy, prints -1

/*
 * A few goes at getting the lower 4 bits:
 */
int lower = packedByte & 0x0F; // sign is not extended, prints 15
lower = (packedByte << 4) >> 4; // doesn't work for positive values
lower = (byte)((byte)(packedByte << 4) >>> 4); // works, but this feels slow

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

假设,正如吉姆·加里森(Jim Garrison)所指出的那样,您的半字节实际上仅代表-8,直到正数7,您可以继续在上半部分执行您的操作,并且可以对下半部分执行以下操作:(packedByte & 0x0F)-2*(packedByte & 0x08) 。此处的逻辑是,它单独留下0到7(减去0),但是如果较低数字的符号位中有1,则它减去2 * 8(即16)以获得适当的负数。