如果我在Bitset中设置了两个不同的位
BitSet x= new BitSet(8);
x.set(0);//.........Case1
x.set(7);//.........Case2
在哪种情况下,我设置了最重要的位?
答案 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;