2016-05-11 23 views
0

BitSetを使用して整数をバイナリ文字列に変換したいだけです。BitSetのtoString()とvalueOf()の理解が難しい

私のコードは以下の通りです。私は理解していなかった何

public class BitSetTest { 
    public static void main(String[] args) { 

     //Method_1 
     int value = 10; //0b1010 
     String bits = Integer.toBinaryString(value); 
     BitSet bs = new BitSet(bits.length()); 

     for (int i = 0; i < bits.length(); i++) { 
      if (bits.charAt(i) == '1') { 
       bs.set(i); 
      } else { 
       bs.clear(i); 
      } 
     } 

     System.out.println(bs); //{0, 2} so 0th index and 2nd index are set. 
     System.out.println(Arrays.toString(bs.toLongArray())); //prints [5] 
     System.out.println(Arrays.toString(bs.toByteArray())); 

     //Method_2   
     value = 42; 
     System.out.println(Integer.toBinaryString(value)); //101010 
     BitSet bitSet = BitSet.valueOf(new long[] { value }); 
     System.out.println(bitSet); 
     System.out.println(Arrays.toString(bitSet.toLongArray())); // prints [42] 
     System.out.println(Arrays.toString(bitSet.toByteArray())); 
    } 
} 

Q1)。これは正しいアプローチ(Method_1またはMethod_2)です。 Method_1は正しいと思われますが、bs.toLongArray()は異なる結果を示します。

Q2)このapiを説明してください。public static BitSet valueOf(long[] longs)は、単一のlongではなくlong値の配列を受け入れますか?そして、この配列では本当に何をしていますか?

Java docは以下を示します。しかし、私は本当に意味を得ていませんでした。

より正確には、BitSet.valueOf(long型)に.get(N)==((long値[N/64] & (1L < <(N%64)))!= 0)
用すべてn < 64 * longs.length。

助けてください。

答えて

4

ビットは右から番号が付けられています。

42 = 0b101010 
<-- bit numbers 

したがって、{1, 3, 5}の出力。

あなたの方法#1は左からビット数です。

新しいBitSetにはビットが設定されていないため、bs.clear(i)に電話する必要はありません。

すべてのビットは、最初にfalseです。どのようにBitSet.valueOf()作品として


、それはかなり簡単です。

byteデータのための2つのバージョン(byte[]ByteBuffer)、及びlongデータ(long[]LongBuffer)のための2つのバージョンがあります。

byteは8ビットで構成され、longは64ビットで構成されます。 BitSetは、最初の値からの最初のN(8または64)ビット、2番目の値からの次のNビットなどで構築されます。

など。 BitSet.valueOf(new long[] { 1, 2, 3 })を呼び出すと、ビット0-63は最初の番号から、ビット64-127は2番目の番号から、ビット128-191は3番目の番号から、結果として{0, 65, 128, 129}になります。

BitSet.valueOf(new byte[] { 1, 2, 3 })を呼び出した場合、ビット0-7は最初の数値から、ビット8-15は2番目の数値から、ビット16-23は3番目の数値から、結果として{0, 9, 16, 17}となります。

+0

ありがとうございます!私の2番目の質問にもお答えください。 –

+0

うわー!!素晴らしい情報!!!ありがとうございました!!! –

関連する問題