6

假设我有一个字节数组,并且我有一个函数来检查字节数组的第 n 个最低有效位索引是 1 还是 0。如果该位为 1,则该函数返回 true,如果该位返回 false为0。字节数组的最低有效位定义为字节数组第0个索引中的最后一个有效位,字节数组的最高有效位定义为(字节数组.长度 - 字节数组的第 1) 个索引。

例如,

byte[] myArray = new byte[2];
byte[0] = 0b01111111;
byte[1] = 0b00001010;

来电:

myFunction(0) = true;
myFunction(1) = true;
myFunction(7) = false;
myFunction(8) = false;
myFunction(9) = true;
myFunction(10) = false;
myFunction(11) = true;

做这个的最好方式是什么?

谢谢!

4

1 回答 1

20

您可以使用此方法:

public boolean isSet(byte[] arr, int bit) {
    int index = bit / 8;  // Get the index of the array for the byte with this bit
    int bitPosition = bit % 8;  // Position of this bit in a byte

    return (arr[index] >> bitPosition & 1) == 1;
}

bit % 8是相对于 a 的位位置byte
arr[index] >> bit % 8将位移动index到位 0 位置。

于 2013-09-21T10:09:07.247 回答