我有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?
答案 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]