20130426【Java】BitSetを使ってみる

お題

BitSetを使ってみる。

 

ソース

import java.util.BitSet;


public class BitSetSample {
 public static void main(String[] args) {
  // 0 ~ 7の範囲のインデックスを持つビットを明示的に表すために十分な初期サイズを持つビットセットを作成します。
  BitSet oBitSetA = new BitSet(8);
  
  // 指定したインデックスのビットをtrueにする
  oBitSetA.set(0);
  oBitSetA.set(3);
  oBitSetA.set(5);
  
  // コンストラクタでセットしたインデックスを超えても大丈夫か確認する。
  oBitSetA.set(8);
  oBitSetA.set(9);
 
  // 0,3,5,7,8,9がtrueになっているか確認するため、出力する
  System.out.println("出力1 : " + oBitSetA);
  
  // 指定したインデックスのビットをfalseにする
  oBitSetA.clear(5);
  oBitSetA.set(7, false);
  
  // falseのビットにfalseをセットする
  oBitSetA.clear(1);
  
  // 1,5,7のビットがfalseになっているか確認するため、出力する
  System.out.println("出力2 : " + oBitSetA);
  
  // BitSet でビット値を表すために実際に使用しているビットの数を出力
  System.out.println("出力3 : " + oBitSetA.size());
  
  // BitSet の「論理サイズ」、つまり BitSet の最上位セットビットのインデックスに 1 を加えた値を出力します。
  System.out.println("出力4 : " + oBitSetA.length());
  
        // ついでにビット演算に興じてみる
        int result = 0;
        int value = 1;
        for(int bitIndex = 0; bitIndex < oBitSetA.length(); bitIndex++)
        {
            if(oBitSetA.get(bitIndex)){
             System.out.print(result + " + 2の" + bitIndex +"乗は? ===>");
                result += (value << bitIndex);
             System.out.println(result);
            } 
        }
       
        // そもそもBitSetを引数なしのコンストラクタで生成した時に、使用するビットの数を調べる。
        BitSet oBitSetB = new BitSet();
        System.out.println("BitSetを引数なしのコンストラクタで生成した時のビット数 : " + oBitSetB.size());
       
        // そもそもBitSetを引数あり(65)のコンストラクタで生成した時に、使用するビットの数を調べる。
        BitSet oBitSetC = new BitSet(65);
        System.out.println("BitSetを引数=65のコンストラクタで生成した時に、使用するビットの数 : " + oBitSetC.size());

 }
}

実行結果

出力1 : {0, 3, 5, 8, 9}
出力2 : {0, 3, 8, 9}
出力3 : 64
出力4 : 10
0 + 2の0乗は? ===>1
1 + 2の3乗は? ===>9
9 + 2の8乗は? ===>265
265 + 2の9乗は? ===>777
BitSetを引数なしのコンストラクタで生成した時のビット数 : 64
BitSetを引数=65のコンストラクタで生成した時に、使用するビットの数 : 128