0

我有 1 个需要 9 位的数字,并且这些位分散成 2 个字节(最高有效字节和最低有效字节)。
MSB就像:

0?????[Bit8][Bit7]

LSB就像:

0[Bit6][Bit5][Bit4][Bit3][Bit2][Bit1][Bit0]  

我的号码包含从 Bit0 到 Bit8 的 9 位。?表示 1 或 0。

那么,我如何获得我的号码?
我可以考虑将 MSB 中的位左移 7 位,然后将其与 LSB 组合形成一个 16 位数字。但是,如何避免在将 MSB 左移 7 位时丢失 Bit8?

4

2 回答 2

4

在这种情况下,Java 位运算符是在 32 位整数上完成的,因此当您向左移动时不会丢失 [bit8]。

    int msb = 0xFF;
    int lsb = 0xFF;
    int result = ( ( msb & 0x3 ) << 7 ) | ( lsb & 0x7F );
    System.out.println(result == 0x1FF);
于 2013-08-14T16:05:44.080 回答
1

此外,您可以尝试 BitSet 类 http://docs.oracle.com/javase/7/docs/api/java/util/BitSet.html

用于处理任意位长度[此处示例大小为 9]

于 2013-08-14T16:10:07.197 回答