プログラマメモ2 - programmer no memo2

int値からBitSetに変換 2006/12/25

int値をBitSetに変換してみます。

シナリオ

int値のビットを操作しやすいようにBitSetにして、操作後、int値に戻す必要があります。


ユーティリティメソッドです。
int値からBitSetにします。
public static BitSet toBitSet(int n) {
final int shift31 = 1 << 31;
BitSet bitSet = new BitSet();
for (int i = 0; i <32; i++) {
bitSet.set(31 - i, (((n << i) & shift31) >>> 31)==0?false:true);
}
return bitSet;
}



BitSetからint値にします。
public static int toint(BitSet bitSet) {
int ret = 0;
for (int i = 31; 0 <= i; i--) {
ret |= (bitSet.get(i) ? 1 : 0) << i;
}
return ret;
}


動かしてみます。単純に値を相互に変換させて結果を出力させてみます。
テストコードです。
public static void main(String[] args) {
BitSet bitSet = toBitSet(Integer.MAX_VALUE);
System.out.println(toint(bitSet));
System.out.println(Integer.MAX_VALUE);
bitSet = toBitSet(Integer.MIN_VALUE);
System.out.println(toint(bitSet));
System.out.println(Integer.MIN_VALUE);
}


結果
2147483647
2147483647
-2147483648
-2147483648


ビット操作してフラグをたてるときなどに使えそうですね。

: