繁体   English   中英

C++ primer 第 5 版:表示整数序列的位集

[英]C++ primer 5th edition: A bitset to represent a sequence of integers

我在 C++ 入门第 5 版上被问到这个练习:

练习 17.10:使用序列 1, 2, 3, 5, 8, 13, 21,初始化一个位集,每个bitset中都有一个1位对应于该序列中的一个数字。 默认初始化另一个bitset组并编写一个小程序来打开每个适当的位。

事实上,我几乎解决了这本书的所有练习,但我无法理解这一点。 我了解std::bitset

我找到了这样的解决方案:

// init from the sequence: 1, 2, 3, 5, 8, 13, 21
std::bitset<22> bitseq("1000000010000100101110");
std::cout << bitseq << std::endl;

// Default initialize, then turn on.
std::bitset<22> bit_default;
for (auto i : {1, 2, 3, 5, 8, 13, 21})
    bit_default.set(i);
std::cout << bit_default << std::endl;

assert(bitseq == bit_default);

但是我不知道这是怎么回事,它是如何工作的? 如果正确,请帮助我理解这一点。 太感谢你们了!

我不明白这样的1000000010000100101110怎么能代表序列1, 2, 3, 5, 8, 13, 21

1000000010000100101110如何表示序列1、2、3、5、8、13、21?

以 2 为基数的数字通常首先写入MSB - 最高有效位在前 - 并且通常从右到左,从最低有效位开始,从 0(或 1)开始编号索引

1000000010000100101110
^       ^            ^-- bit with index 0  - least significant bit 2^0
^       ^           ^--- bit with index 1
^       ^          ^---- bit with index 2
^       ^         ^----- bit with index 3
^       ^        ^------ bit with index 4
^       ^       ^------- bit with index 5
^       ^      ^-------- bit with index 6
^       ^     ^--------- bit with index 7
^       ^--------------- bit with index 13
^----------------------- bit with index 21 - most significant bit 2^21

当从右侧从 0 开始对位位置进行编号时,序列1, 2, 3, 5, 8, 13, 21表示字符串1000000010000100101110中的设置位。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM