2011-07-27 35 views
2

目前,我正在學習位集合,並在一個段落,它說這個他們用繩子相互作用的bitset操作:C++新手就用繩子

「字符串和位集的編號慣例是負相關的:最右邊的字符串中的字符 - 具有最高下標的字符 - 用於初始化位集中的低位位 - 下標爲0的位。「

但是後來它們給出一個例子+示意圖,它表示這樣的:的str

string str("1111111000000011001101"); 
bitset<32> bitvec5(str, 5, 4); // 4 bits starting at str[5], 1100 

值:
1 1 1 1 1(1 1 0 0)0 0 0 ... ...

值的bitvec5
... 0 0 0 0 0 0 0(1 1 0 0)

這個例子顯示了它取最右邊的位,並把因此,字符串中的最後一個元素是位集中的最後一個元素,而不是第一個元素。 ?

這是正確的(或者都錯了嗎?)

+0

請記住,在一個二進制值(或任何其他基地的事情),最低的數字是在右邊。 –

回答

3

他們都是對的。

傳統上,機器字中的位從右到左編號,所以最低位(位0)向右,就像它在字符串中一樣。

位集看起來像這樣

...1100 value 
...3210 bit numbers 

和看起來一樣

"1100" 

將有string[0] == '1'string[3] == '0',完全相反的串!

+0

啊我明白了,最低位顯示在右邊,謝謝。我剛纔假設,當它說「最低」意味着「左」,我的壞。 – user863492

0
string strval("1100");  //1100, so from rightmost to leftmost : 0 0 1 1 
bitset<32> bitvec4(strval); //bitvec4 is 0 0 1 1 

所以,無論你正在閱讀的是正確的(文本和例子):

在string--最右邊的字符的具有最高 標 - 用於初始化在位集低位比特 - 該 位與下標0

+0

不會-1,但您的答案不正確。 Bo Persson提供了一個正確的答案 –

+0

我的回答是正確的,因爲這是你從VS調試器看到的。只是沒有意識到user863492正在尋找什麼是:http://en.wikipedia.org/wiki/Endianness – Gob00st

+0

另請參見http://en.wikipedia.org/wiki/File:Big-little_endian.png – Gob00st