ビットセットに2つの異なるビットを設定した場合
BitSet x= new BitSet(8);
x.set(0);//.........Case1
x.set(7);//.........Case2
どちらの場合、最上位ビットを設定していますか?
ビットセットに2つの異なるビットを設定した場合
BitSet x= new BitSet(8);
x.set(0);//.........Case1
x.set(7);//.........Case2
どちらの場合、最上位ビットを設定していますか?
ビットセットは膨大な数ではありません。これはビットのセット(技術的には、ベクトル/リスト/無限配列)です。BitSet
それを数値に変換する方法すらありません。
内部表現に関して-それは実装に依存します。実装では、ビット0を内部配列の最初の整数の最下位ビットとして格納することを選択できますが、これは固定されていません。Sunの実装はこれを行うと思います(intではなくlongの配列を使用する場合を除く)。
ただし、ビットセットと整数の間には自然な全単射があります。ビットセットは0から上にインテックスされ、負でない整数は、ビット0として格納された最下位ビットを持つ2進数として、自然数でbitSetとして一意に表すことができます。このバイアスでは、ビット7の方が重要です。ビット0よりも重要ですが、ビットセット内のすべてのビットについて、次の各ビットがさらに重要になります。
LSBはインデックス0です。
例:'a'
キャラクター(binary )
を作成しましょう0110 0001
。
注意:ビットを左から右に追加すると、インデックス7から0になります。
BitSet bitSet = new BitSet(8);
bitSet.set(7, false);
bitSet.set(6, true);
bitSet.set(5, true);
bitSet.set(4, false);
bitSet.set(3, false);
bitSet.set(2, false);
bitSet.set(1, false);
bitSet.set(0, true);
// let's convert it to a byte[]
byte[] array = bitSet.toByteArray();
// and let's convert that byte[] to text now.
String someText = new String(array, Charsets.US_ASCII);
// this will print an 'a'
System.out.println(someText);
これは(JDK7 +)と同じです:
System.out.println((char)0b01100001);
最上位ビットはBitSetにとって純粋に主観的なものですが、両端を設定すると、そのうちの1つが最も重要である可能性が高いと言えますが、どちらが重要であるかはわかります。;)
バイトの最上位(および最下位)ビットを設定する場合は、次のことができます。
byte b = (byte) ((1 << 7) | (1 << 0));
また
byte b = 0;
b |= 1 << 0;
b |= 1 << 7;