двоичное выражение целого числа в логический массив

0

Учитывая целое число, я хочу получить его двоичное выражение и сохранить его в булевом массиве.

Например,

bool b[32];
int a=98; // a=0b1100010

Надеюсь, есть способ сделать b, 010001100000000000000000 или что-то подобное.

Я немного разбираюсь в битах, но не знаю, как преобразовать биты в логический массив (кроме использования для цикла).

Я думал, что 98 хранится на компьютере в виде последовательности 1 или 0, должен быть какой-то способ, чтобы мы могли получить эту последовательность, но я не знаю, как это сделать.

Спасибо.

Теги:
binary
boolean

1 ответ

0
Лучший ответ

Я думаю, вы на правильном пути с bitset.

Чтобы построить bitset размером 32, содержащий 98, вы можете просто сделать:

bitset<32> foo(98);

Вы также можете построить такую вставку, что в наиболее значимых битах:

bitset<32> foo(98 << 24);
cout << foo.to_string() << endl; // Prints: 01100010000000000000000000000000

Что касается преобразования bitset в массив, нет необходимости использовать operator[] для bitset. Плюс вы получаете:

  • all
  • any
  • count
  • flip
  • none
  • reset
  • set
  • to_string
  • to_ulong
  • to_ullong

Плюс все логические операторы, которые поддерживаются целыми числами.

Редактировать:

ОК, скажем, у вас есть 100 int которые вы хотите поместить в bitset<sizeof(int)> в: vector<int> bar; Давайте также скажем, например, что вы хотите отменить только нечетные int s. Вот что я буду делать:

vector<bitset<sizeof(int) * 8>> foo(bar.size()); // Creating as many empty bitsets as there are ints in bar

for (int i = 0; i < bar.size(); ++i){
    foo[i] = bar[i]; // Initializing each element of foo

    if (foo[i][0].test()){ // Is this number odd
        for (int j = 0; j < foo[i].size() / 2; ++j){ // This loop reverses the elements in a bitset
            const bool swap = foo[i][j];

            foo[i][j] = foo[i][foo[i].size() - j - 1];
            foo[i][foo[i].size() - j - 1] = swap;
        }
    }
    cout << i << ". " << foo[i] << endl; // This is for testing purposes it'll print the contents of the indexed bitset in foo
}
  • 1
    В 32-битном примере OP битовая строка переворачивается , а не дополняется.
  • 0
    Мне нужно хранить двоичный файл в массиве, потому что он понадобится мне позже, и там много номеров. Есть ли способ, который может создать много битов, то есть, foo1, foo2, foo3, ...?
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню