int値からBitSetに変換
2006/12/25
java
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;
}
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;
}
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);
}
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
ビット操作してフラグをたてるときなどに使えそうですね。
: