1

Java で、サイズ 8 の BitSet を作成し、それを出力するためにバイトとして格納できますか? BitSets のドキュメントでは、それについて言及されていません。いいえということですか?

4

4 に答える 4

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 までインデックス付けされていることを前提としています。たとえば、ビット 0 を左端の 0 と見なすビットを想定し01101001ます。ただし、ビットを右から左に割り当てる場合は、ビット 0 が右端の 1 になります。その場合は、output |= 1 << i代わりに必要です。

于 2011-04-18T18:05:30.523 に答える
2

そのために組み込まれているものはありません。明らかにそれを自分で実装することができます。

于 2011-04-18T18:00:03.793 に答える
0

ビットセットはビットの配列です

JVM は 32 ビットのスタック セルを使用します。つまり、JVM の各レジスタは 1 つの 32 ビット アドレスを格納します。

プリミティブブール値は 1 ビットに設定されていますが、32 ビットとして処理されることがわかっています。ブール値の配列は、バイト配列と見なされます

BitSet では、ビット セットの各コンポーネントにブール値があります

すべてのビット セットには現在のサイズがあります。これは、ビット セットによって現在使用されているスペースのビット数です。サイズはビット セットの実装に関連するため、実装によって変わる可能性があることに注意してください。ビット セットの長さは、ビット セットの論理長に関連し、実装とは別に定義されます。

于 2011-04-18T18:09:49.307 に答える
-1

BitSet クラスは、そのビットをネイティブ データ型にエクスポートまたはインポートすることを意図していないことは明らかであり、1 バイトの固定サイズを処理したい場合は非常に重くなります。したがって、バイトのビットを個別に操作し、結果のバイトを使用するだけの場合は、必要なものではない可能性があります。次のような 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 );
    }    
}
于 2011-04-18T19:06:46.617 に答える