Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中组合2字节中的位?_Java_Byte_Bit Manipulation_Bitwise Operators_Bit Shift - Fatal编程技术网

如何在Java中组合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

我有一个需要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位,然后将其与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)