我有一项作业,要求我使用无符号整数实现集合。
通常,我会使用内置的c ++集来存储1-9之间的数字。
任务是创建一个备用数据结构,该结构通过无符号整数保存您的集合中的数字。
例如,如果我的数字中有数字'1','3'和'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”
[如何将成员变量'valuesInSet'视为我给它的文字值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));
}