使用无符号int作为二进制来在c++中实现一个集

Using an unsigned int as binary to implement a set in c++

本文关键字:实现 一个 c++ int 无符号 二进制      更新时间:2023-10-16

我有一个赋值,要求我使用无符号整数实现一个集。

通常,我会使用内置的c++集来存储1-9的数字。

任务是创建一个备用数据结构,通过无符号整数保存集合中的数字。

例如,如果我的集合中有一个数字"1"、"3"answers"4",它看起来像:

000001101

这可以通过在插入新项目时将每个位从0切换到1来实现。

但当我最初通过构造函数创建"unsigned int"时:

class unsignedIntSet {
private:
unsigned int valuesInSet;
int noOfElements;
public:
unsignedIntSet() : noOfElements(0), valuesInSet(000000000){
cout<<"the values in the set are: "<<valuesInSet;
}
...
};

它打印:"集合中的值为:0256">

如何将成员变量"valuesISet"视为我赋予它的文字值000000000,而不是出于某种原因将其转换。

我不知道如何通过这种方式获得0256的输出。我得到的输出是0。还要注意,000000000是八进制文字(但无论哪种方式,结果都是0(。你要找的是0b00000000——在这里你可以切换每个比特并获得正确的数字。例如,0b00001010就是10

打印二进制表示的最简单方法可能是使用位集。包括<bitset>并执行以下操作:

std::cout << "the values in the set are: "
<< std::bitset<sizeof(unsigned int) * CHAR_BIT>(valuesInSet);

我怀疑使用bitset会使任务变得毫无意义(因为这是你应该实现的(,所以你也可以尝试

for (int i = sizeof(unsigned int)* CHAR_BIT -1; i >= 0; i--) {
std::cout << bool(valuesInSet & (1 << i));
}