将无符号int用作二进制,以在c ++中实现集合

问题描述 投票:0回答:1

我有一项作业,要求我使用无符号整数实现集合。

通常,我会使用内置的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,而不是出于某种原因而将其转换。

c++ integer unsigned
1个回答
0
投票

我不知道您如何以这种方式获得0256的输出。我得到的输出是0。另请注意,000000000是八进制文字(但是无论哪种结果都是0)。您要寻找的是0b00000000-在这里您可以切换每个位并获取正确的数字。例如0b0000101010

可能最简单的打印其二进制表示形式的方法是使用位集。包含<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));
}
© www.soinside.com 2019 - 2024. All rights reserved.