关于使用字符串进行Bitset操作的C ++新手

时间:2011-07-27 09:27:06

标签: c++ string bitset

我目前正在学习bitset,并在一段中说明了他们与字符串的互动:

"字符串和位集的编号约定是反向相关的:字符串中最右边的字符 - 具有最高下标的字符 - 用于初始化bitset中的低位 - 带有下标0的位。"

但是稍后会给出一个示例+图表,其中显示的内容如下:

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

str的价值:
1 1 1 1 1(1 1 0 0)0 0 0 ...

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

这个例子显示它占据了最右边的位并放置它,所以字符串中的最后一个元素是bitset中的最后一个,而不是第一个。

哪个是对的?(或两者都错了?)

2 个答案:

答案 0 :(得分:3)

他们都是对的。

传统上,机器字中的位从右到左编号,因此最低位(位0)位于右侧,就像它在字符串中一样。

bitset看起来像这样

...1100   value
...3210   bit numbers

和看起来相同的字符串

"1100"

会有string[0] == '1'string[3] == '0',恰恰相反!

答案 1 :(得分:0)

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

所以无论你读什么都是正确的(文字和例子):

  

字符串中最右边的字符 - 最高字符   下标 - 用于初始化bitset中的低阶位 -   位下标0。