Java bitSet从右到左或从左到右开始设置位?

时间:2012-12-29 11:01:29

标签: java

如果我在Bitset中设置了两个不同的位

  BitSet x= new BitSet(8);
  x.set(0);//.........Case1

  x.set(7);//.........Case2

在哪种情况下,我设置了最重要的位?

3 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分: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);

答案 2 :(得分:0)

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

如果要设置字节的最高(和最低)有效位,可以执行

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

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