2012-12-29 198 views
2

如果我在一個比特集Java bitSet開始從右向左或從左向右設置位?

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

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

設置兩個不同的比特在這種情況下,我米設置最顯著位?

+2

一個bitset不是一個數字,它是一個具有同等重要性的位列表。 –

+1

BitSet上的操作是通過索引執行的。 –

+0

@MarkRotteveel Got Ya –

回答

2

有點集不是一個巨大的數字。這是一組(技術上來說,是一個向量/列表/無限數組)。 BitSet甚至沒有將其轉換爲數字的方法。

關於內部表示 - 這是依賴於實現的。雖然一個實現可以選擇將位0作爲其內部數組中第一個整數的最低有效位進行存儲,但這並不是一成不變的。我想認爲 Sun的實現這樣做(除了它使用一個long數組,而不是int)。

但是,bitSets和整數之間有一個自然雙射。位集合從0開始被整數化,並且任何非負整數都可以以自然的方式被唯一地表示爲一個二進制數,最低有效位被存儲爲位0. 在這種雙向注入下,位7是比位0更重要,但是對於位集中的每一位,每一位的下一位更爲重要。

0

雖然最重要的位對於BitSet來說純粹是主觀的,但是設置兩端可以說其中一個可能是最重要的,但是可以說它是哪一個。 ;)

如果你想設置一個字節的最高(和最低)顯著位,你可以做

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

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

的LSB是索引0

實施例: 讓我們創建的字符'a'(二進制0110 0001)。

請注意:添加到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); 

位左到右,轉換從指數7下運行的是一樣的(JDK7 +):

System.out.println((char)0b01100001);