Как изменить целое число, используемое 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&)'"
Я чувствую, что должен быть какой-то простой способ сделать это, но я не смог ничего найти.
Вы можете использовать
mybits = bitset<32>(63);
как указали другие ответы, или просто
mybits = 63;
Последнее работает, потому что 63 неявно преобразуется в bitset<32>
(как конструктор из long
не помечен как explicit
). Он делает то же самое, что и первая версия, но немного менее многословен.
Как из справочная документация
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;
Просто позвони:
myBits = std::bitset<32>{63};
std::bitset
можно назначить для копирования, поэтому вы создаете новое с желаемым значением и назначаете его для набора битов, который хотите изменить:
bitset<32> mybitset{21};
mybitset = bitset<32>{42};
Если вы не хотите указывать тип еще раз, вы можете использовать decltype
или даже лучше тот факт, что конструктор bitsets не является явным:
mybitset = {42};
(В действие)