【问题标题】:Using an unsigned int as binary to implement a set in c++使用无符号整数作为二进制在 C++ 中实现集合
【发布时间】:2020-02-27 00:03:38
【问题描述】:

我有一个任务要求我使用无符号整数来实现一个集合。

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

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

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

000001101

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

但是当我最初通过构造函数创建我的“无符号整数”时:

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】:

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

打印其二进制表示的最简单方法可能是使用 bitset。包括 &lt;bitset&gt; 并执行以下操作:

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));
}

【讨论】:

    猜你喜欢
    • 2023-03-25
    • 2017-09-12
    • 2017-09-06
    • 2013-11-18
    • 2019-02-23
    • 2018-04-29
    • 1970-01-01
    • 2018-10-28
    相关资源
    最近更新 更多