Использование unsigned int как двоичного файла для реализации набора в c ++ - PullRequest
0 голосов
/ 31 октября 2019

У меня есть назначение, которое требует от меня реализации набора с использованием целого числа без знака.

Обычно я бы использовал встроенный набор 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, вместо того, чтобы по какой-то причине его преобразовать.

1 Ответ

0 голосов
/ 31 октября 2019

Я не вижу, как вы получаете вывод 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));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...