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

最佳答案

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

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

关于java - 如何在Java中合并2个字节中的位?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18236560/

10-11 21:37