如何在Java中组合2字节中的位?
我有一个需要9位的数字,这些位分成2个字节(最高有效字节和最低有效字节)。如何在Java中组合2字节中的位?,java,byte,bit-manipulation,bitwise-operators,bit-shift,Java,Byte,Bit Manipulation,Bitwise Operators,Bit Shift,我有一个需要9位的数字,这些位分成2个字节(最高有效字节和最低有效字节)。 MSB类似于: 0?????[Bit8][Bit7] 0[Bit6][Bit5][Bit4][Bit3][Bit2][Bit1][Bit0] LSB就像: 0?????[Bit8][Bit7] 0[Bit6][Bit5][Bit4][Bit3][Bit2][Bit1][Bit0] 我的数字由9位组成,从0位到8位?表示1或0 那么,我如何获得我的号码? 我可以考虑将MSB中的位向左移位7位,然后将其与LS
MSB类似于:
0?????[Bit8][Bit7]
0[Bit6][Bit5][Bit4][Bit3][Bit2][Bit1][Bit0]
LSB就像:
0?????[Bit8][Bit7]
0[Bit6][Bit5][Bit4][Bit3][Bit2][Bit1][Bit0]
我的数字由9位组成,从0位到8位<代码>?表示1或0
那么,我如何获得我的号码?我可以考虑将MSB中的位向左移位7位,然后将其与LSB组合,形成一个16位的数字。但是,在将MSB左移7位时,如何避免丢失位8?在这种情况下,Java逐位运算符是在32位整数上完成的,因此在左移时不会丢失[Bit8]
int msb = 0xFF;
int lsb = 0xFF;
int result = ( ( msb & 0x3 ) << 7 ) | ( lsb & 0x7F );
System.out.println(result == 0x1FF);
intmsb=0xFF;
int lsb=0xFF;
int result=((msb&0x3)Java按位运算符在本例中是在32位int上完成的,因此在向左移位时不会丢失[bit8]
int msb = 0xFF;
int lsb = 0xFF;
int result = ( ( msb & 0x3 ) << 7 ) | ( lsb & 0x7F );
System.out.println(result == 0x1FF);
intmsb=0xFF;
int lsb=0xFF;
int result=((msb&0x3)此外,您可以尝试使用位集类
要处理任意位长度[这里的示例大小为9]此外,您可以尝试使用位集类
用于处理任意位长度[这里的示例大小9]谢谢。但是我不认为&0x7F
部分是多余的。result=((msb&0x3)谢谢。但是我不认为&0x7F
部分是多余的。result=((msb&0x3)