我目前正在学习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中的最后一个,而不是第一个。
哪个是对的?(或两者都错了?)
答案 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。