编程语言
首页 > 编程语言> > java-处理代表位域的字节数组中的位的有效方法

java-处理代表位域的字节数组中的位的有效方法

作者:互联网

因此,我有一个代表位域的字节数组.字节数组的任何索引处的位1表示我有对应的块,反之亦然,即为0.现在,每当我有对应的块时,都需要将0的位值更改为1.

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

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

解决方法:

检查位n是否为真

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

设置位n

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

如果您使用的是BitSet,则要简单一些

实例化

BitSet bitField = new BitSet(); //can specify size

检查位n是否为真

bitField.get(n);

设置位n

bitField.set(n, value); //can also use set(int) and clear(int) instead

标签:bit-fields,bit-manipulation,java
来源: https://codeday.me/bug/20191025/1929314.html