2

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?

4

3 回答 3

2

一个位集合并不是一个巨大的数字。它是一组(技术上是向量/列表/无限数组)位。甚至没有BitSet将其转换为数字的方法。

关于内部表示 - 这取决于实现。虽然实现可以选择将位 0 ​​存储为其内部数组中第一个整数的最低有效位,但这并不是一成不变的。我认为Sun 实现会这样做(除了它使用一个 long 数组,而不是 int 数组)。

然而,在 bitSet 和整数之间存在一个自然的双射。一个位集从 0 向上插入,并且任何非负整数都可以以自然的方式唯一地表示为一个位集,作为二进制数,最低有效位存储为位 0。在这种双射下,位 7 更重要比位 0,但对于位集中的每一位,下一位更重要。

于 2012-12-29T11:15:42.210 回答
1

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);
于 2014-07-18T11:20:03.893 回答
0

虽然最重要的位对于 BitSet 来说纯粹是主观的,但是设置两端你可以说其中一个可能是最重要的,但你可以说它是哪一个。;)

如果你想设置一个字节的最高(和最低)有效位,你可以做

byte b = (byte) ((1 << 7) | (1 << 0));

或者

byte b = 0;
b |= 1 << 0;
b |= 1 << 7;
于 2012-12-29T11:08:49.690 回答