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

C++ Novice regarding Bitset operations with strings

本文关键字:Bitset 操作 字符串 于使用 新手 C++      更新时间:2023-10-16

我目前正在学习比特集,在一段话中谈到了它们与字符串的交互:

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

然而,稍后他们给出了一个示例+图,其中显示了这样的内容:

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

str的值:
1 1 1 1(1 1 0 0(0 0 0。。。

bitvec5的值:
…0 0 0 0(1 1 0 0(

这个例子显示它取最右边的位,并把它放在字符串的最后一个元素是位集中的最后一位,而不是第一位。

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

他们都是对的。

传统上,机器字中的位是从右到左编号的,所以最低的位(位0(在右边,就像它在字符串中一样。

比特集看起来像这个

...1100   value
...3210   bit numbers

和看起来相同的字符串

"1100"

将具有string[0] == '1'string[3] == '0',完全相反!

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

因此,无论你读到什么都是正确的(文本和示例(:

字符串中最右边的字符--具有最高值的字符subscript—用于初始化位集中的低位—下标为0的位。