2

我目前正在学习 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)

此示例显示它获取最右边的位并将其放置,因此字符串中的最后一个元素是位集中的最后一个元素,而不是第一个。

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

4

2 回答 2

3

他们都是对的。

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

位集看起来像这样

...1100   value
...3210   bit numbers

和看起来一样的字符串

"1100"

会有string[0] == '1'and string[3] == '0',正好相反!

于 2011-07-27T09:44:08.273 回答
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 的位)。

于 2011-07-27T09:42:11.950 回答