簡體   English   中英

將BitSet設置為原始類型?

[英]Set a BitSet as a primitive type?

在Java中,您可以創建大小為8的BitSet並將其存儲為字節以便輸出嗎? BitSets上的文檔沒有提及。 那不是嗎?

您不能將BitSetbyte

您可以編寫代碼以執行所需的操作。 給定一個名為bitsBitSet ,您可以執行以下操作:

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

沒有內置的東西。 您顯然可以自己實現。

位集是位數組

JVM使用一個32位堆棧單元,即JVM中的每個寄存器存儲一個32位地址

我們知道原始布爾值設置為1位,但處理為32位。 布爾數組將被視為字節數組

在BitSet中,位集中的每個分量都有一個布爾值

每個位集都有一個當前大小,即當前由位集使用的空間的位數。 請注意,大小與位集的實現有關,因此它可能隨實現而變化。 位集合的長度與位集合的邏輯長度有關,並且獨立於實現來定義。

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 );
    }    
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM