处理表示位域的字节数组中位的有效方法

tin*_*uge 3 java bit-manipulation bit-fields

所以,我有一个表示位域的字节数组。字节数组的任何索引处的位 1 意味着我有相应的部分,反之亦然。对于 0。现在,我需要将 0 的位值更改为 1,只要我有相应的部分。

我的问题是,如果我将字节数组转换为 int 数组,然后更改数组索引的相应值会更好,还是在字节数组中更简单?

如果是前者,如何将字节数组转换为整数数组?如果是后者,如何改变对应字节数组的值?

phf*_*ack 5

检查位 n 是否为真

boolean get(int n, byte[] bitField)
{
    return (bitField[n >> 3] & 1 << (n & 0x7)) != 0; //or use n / 8 and n % 8
}
Run Code Online (Sandbox Code Playgroud)

设置位 n

void set(int n, byte[] bitField, boolean value)
{
    if(value)
        bitField[n >> 3] |= 1 << (n & 0x7);
    else
        bitField[n >> 3] &= ~(1 << (n & 0x7));
}
Run Code Online (Sandbox Code Playgroud)

如果您使用BitSet,它会更简单一些

实例化

BitSet bitField = new BitSet(); //can specify size
Run Code Online (Sandbox Code Playgroud)

检查位 n 是否为真

bitField.get(n);
Run Code Online (Sandbox Code Playgroud)

设置位 n

bitField.set(n, value); //can also use set(int) and clear(int) instead
Run Code Online (Sandbox Code Playgroud)