如何在Java中组合2个字节的位?

时间:2013-08-14 15:55:10

标签: java byte bit-manipulation bitwise-operators bit-shift

我有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?

2 个答案:

答案 0 :(得分:4)

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

    int msb = 0xFF;
    int lsb = 0xFF;
    int result = ( ( msb & 0x3 ) << 7 ) | ( lsb & 0x7F );
    System.out.println(result == 0x1FF);

答案 1 :(得分:1)

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

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