2011-07-27 31 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