if I set two different bits in a Bitset
BitSet x= new BitSet(8);
x.set(0);//.........Case1
x.set(7);//.........Case2
In which case I m setting the most significant bit?
if I set two different bits in a Bitset
BitSet x= new BitSet(8);
x.set(0);//.........Case1
x.set(7);//.........Case2
In which case I m setting the most significant bit?
一个位集合并不是一个巨大的数字。它是一组(技术上是向量/列表/无限数组)位。甚至没有BitSet
将其转换为数字的方法。
关于内部表示 - 这取决于实现。虽然实现可以选择将位 0 存储为其内部数组中第一个整数的最低有效位,但这并不是一成不变的。我认为Sun 实现会这样做(除了它使用一个 long 数组,而不是 int 数组)。
然而,在 bitSet 和整数之间存在一个自然的双射。一个位集从 0 向上插入,并且任何非负整数都可以以自然的方式唯一地表示为一个位集,作为二进制数,最低有效位存储为位 0。在这种双射下,位 7 更重要比位 0,但对于位集中的每一位,下一位更重要。
LSB 是索引 0。
示例:
让我们创建字符'a'
(二进制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 来说纯粹是主观的,但是设置两端你可以说其中一个可能是最重要的,但你可以说它是哪一个。;)
如果你想设置一个字节的最高(和最低)有效位,你可以做
byte b = (byte) ((1 << 7) | (1 << 0));
或者
byte b = 0;
b |= 1 << 0;
b |= 1 << 7;