Java 如何将字节数组划分为位

Java 如何将字节数组划分为位,java,bit-manipulation,bit,Java,Bit Manipulation,Bit,如何在字节数组中存储两个数字,或将位设置在不同的位置? 将数组分成两个块。 一块5位,第二块3位。 所以存储6和3看起来像: num: 6 3 bit 7 - 6 - 5 - 4 - 3 || 2 - 1 - 0 bin 0 - 0 - 1 - 1 - 0 || 0 - 1 - 1 byte[] byte = new byte[1]; int x = 6

如何在字节数组中存储两个数字,或将位设置在不同的位置? 将数组分成两个块。 一块5位,第二块3位。 所以存储6和3看起来像:

      num:            6                 3
      bit       7 - 6 - 5 - 4 - 3 || 2 - 1 - 0
      bin       0 - 0 - 1 - 1 - 0 || 0 - 1 - 1


      byte[] byte = new byte[1];

      int x = 6;  // bin 00000110
      int y = 3;  // bin 00000011

      byte[0] = (byte)(x >> 8)
      byte[0] = (byte)(y >> 2);

这不起作用。

假设您将信息存储为:XXXXX YYY

x = 31; //x must be between [0,31]  `000 11111`
y = 7;  //y must be between [0,7]   `00000 111`

z = (x << 3) | y;


x = (z & 0xF8) >> 3;
y = z & 0x07;
x=31//x必须介于[0,31]`000和11111之间`
y=7//y必须介于[0,7]`00000111之间`
z=(x>3;
y=z&0x07;
按将底部位放置到位所需的量移动(向左,而不是向右!),或将结果一起移动:

byte[0] = (byte)((x<<3) | y);    // x needs to move 3 to make room for y

byte[0]=(byte)((xSo你说:左移X 3位包括Y??是的,左移3位,所以你得到
11111000
和按位或用Y。
byte[0] = (byte)(((x&0x1F)<<3) | (y&0x3));