C++ 入门第 5 版:表示整数序列的位集
C++ primer 5th edition: A bitset to represent a sequence of integers
有人问我 C++ primer 第 5 版这个练习:
Exercise 17.10: Using the sequence 1, 2, 3, 5, 8, 13, 21, initialize a bitset
that has a 1
bit in each position corresponding to a number in this
sequence. Default initialize another bitset
and write a small program to turn on each of the appropriate bits.
其实我几乎把书上所有的习题都做完了,但是我就是看不懂这个。我明白了 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
?
How can 1000000010000100101110 represent the sequence 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
.
中的集合位
有人问我 C++ primer 第 5 版这个练习:
Exercise 17.10: Using the sequence 1, 2, 3, 5, 8, 13, 21, initialize a
bitset
that has a1
bit in each position corresponding to a number in this sequence. Default initialize anotherbitset
and write a small program to turn on each of the appropriate bits.
其实我几乎把书上所有的习题都做完了,但是我就是看不懂这个。我明白了 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
?
How can 1000000010000100101110 represent the sequence 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
.