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