将BitSet设置为基本类型?

时间:2011-04-18 17:57:54

标签: java object primitive-types bitset

在Java中,您可以创建一个大小为8的BitSet并将其存储为一个字节以便输出吗? BitSets上的文档没有提到它。这是否意味着没有?

4 个答案:

答案 0 :(得分:5)

您无法将BitSet投射到byte

您可以编写代码来执行您想要的操作。如果BitSet名为bits,请转到:

byte output = 0;
for (int i = 0; i < 8; i++) {
    if (bits.get(i)) {
        output |= 1 << (7 - i);
    }
}

更新:上面的代码假设您的位从左到右编入索引0到7。例如。假设位01101001,您认为位0是最左边的0.如果您从右到左分配位,那么位0将是最右边的1.在这种情况下,您希望output |= 1 << i代替

答案 1 :(得分:2)

没有内置任何内容。你可以自己实现这一点。

答案 2 :(得分:0)

位设置是位数组

JVM使用32位堆栈单元,即JVM中的每个寄存器都存储一个32位地址

我们知道原始布尔值设置为1位但处理为32位。布尔数组将被视为字节数组

在BitSet中的

位集的每个组件都有一个布尔值

  

每个位集都有当前大小,   这是空间的位数   目前由位集使用。注意   大小与之相关   执行一个位设置,所以它可能   改变实施。长度   位集的相关逻辑长度   有点集并定义   独立于实施。

答案 3 :(得分:-1)

BitSet类显然不是要将其位导出或导入到本机数据类型,如果你只想处理单个字节的固定大小,那么它也很重要。因此,如果您只想独立操作一个字节的位然后使用结果字节,那么它可能不是您所需要的。看起来您可能只想使用这样的API:

SimpleBitSet bs = new SimpleBitSet( 'A' );
bs.setBit( 5 );
byte mybyte = bs.getByte();

因此,这种简化位集的实现可能如下所示:

public class SimpleBitSet
{
    private byte bits;

    public SimpleBitSet( int bits )
    {
        this.bits = (byte) bits;
    }

    public byte getByte()
    {
        return bits;
    }

    public boolean getBit( int idx )
    {
        checkIndex( idx );
        return ( bits & ( 1 << idx ) ) != 0;
    }

    public void setBit( int idx )
    {
        checkIndex( idx );
        bits |= 1 << idx;
    }

    public void clearBit( int idx )
    {
        checkIndex( idx );
        bits &= ~( 1 << idx );
    }

    protected void checkIndex( int idx )
    {
        if( idx < 0 || idx > 7 )
            throw new IllegalArgumentException( "index: " + idx );
    }    
}