Изменить целое число в битах

Как изменить целое число, используемое bitset? Предположим, я использовал bitset объявить переменную mybitset который хранит биты числа, скажем, 32. После выполнения некоторых операций, я хочу mybitset чтобы сохранить биты другого числа, скажем, 63. Как мне этого добиться?

Я добавил небольшой пример кода ниже, чтобы помочь объяснить.

bitset<32> mybits(32);
....
mybits(63);  // gives compilation error here, stating "no match for call to '(std::bitset<32u>) (uint&)'"

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

2

Решение

Вы можете использовать

mybits = bitset<32>(63);

как указали другие ответы, или просто

mybits = 63;

Последнее работает, потому что 63 неявно преобразуется в bitset<32> (как конструктор из long не помечен как explicit). Он делает то же самое, что и первая версия, но немного менее многословен.

3

Другие решения

Как из справочная документация

bitset отвечает требованиям CopyConstructible а также CopyAssignable.

Таким образом, вы можете просто назначить из другого std::bitset совпадение с той же сигнатурой параметра шаблона:

bitset<32> mybits(32);
// ....
mybits = bitset<32>(63);

или используйте один из неявных конструкторов (2) вдоль вывода типа lvalue:

bitset( unsigned long val ); // (until C++11)
constexpr bitset( unsigned long long val );

и назначьте значение напрямую:

mybits = 63;
2

Просто позвони:
myBits = std::bitset<32>{63};

1

std::bitset можно назначить для копирования, поэтому вы создаете новое с желаемым значением и назначаете его для набора битов, который хотите изменить:

bitset<32> mybitset{21};
mybitset = bitset<32>{42};

Если вы не хотите указывать тип еще раз, вы можете использовать decltype или даже лучше тот факт, что конструктор bitsets не является явным:

mybitset = {42};

действие)

1
По вопросам рекламы [email protected]