bitset<32> bitvec5(str, 5, 4); //
bitset<32> bitvec6(str, str.size()-4); //
//
Здесь набор битов bitvec5
инициализируется подстрокой str
, начиная с символа str[5]
, и четырьмя символами далее. Как обычно, крайний справа символ подстроки представляет бит самого низкого порядка. Таким образом, набор bitvec5
инициализируется битами с позиции 3 до 0 и получает значение 1100, а остальные биты — 0. Инициализатор набора битов bitvec6
передает строку и отправную точку, поэтому он инициализируется символами строки str
, начиная с четвертого и до конца строки str
. Остаток битов набора bitvec6
инициализируется нулями. Эти инициализации можно представить так:
Упражнение 17.9. Объясните битовую схему, которую содержит каждый из следующих объектов bitset
:
(a) bitset<64> bitvec(32);
(b) bitset<32> bv(1010101);
(c) string bstr; cin >> bstr; bitset<8> bv(bstr);
17.2.2. Операции с наборами битов
Операции с наборами битов (табл. 17.3) определяют различные способы проверки и установки одного или нескольких битов. Класс bitset
поддерживает также побитовые операторы, которые рассматривались в разделе 4.8. Применительно к объектам bitset
эти операторы имеют тот же смысл, что и таковые встроенные операторы для типа unsigned
.
Таблица 17.3. Операции с наборами битов
b.any() | Установлен ли в наборе b хоть какой-нибудь бит? |
b.all() | Все ли биты набора b установлены? |
b.none() | Нет ли в наборе b установленных битов? |
b.count() | Количество установленных битов в наборе b |
b.size() | Функция constexpr (см. раздел 2.4.4), возвращающая количество битов набора b |
b.test(pos) | Возвращает значение true , если бит в позиции pos установлен, и значение false в противном случае |
b.set(pos, v) b.set() | Устанавливает для бита в позиции pos логическое значение v . По умолчанию v имеет значение true . Без аргументов устанавливает все биты набора b |
b.reset(pos) b.reset() | Сбрасывает бит в позиции pos или все биты набора b |
b.flip(pos) b.flip() | Изменяет состояние бита в позиции pos или все биты набора b |
b[pos] | Предоставляет доступ к биту набора b в позиции pos ; если набор b константен и бит установлен, то b[pos] возвращает логическое значение true , а в противном случае — значение false |
b.to_ulong() b.to_ullong() | Возвращает значение типа unsigned long или типа unsigned long long с теми же битами, что и в наборе b . Если битовая схема в наборе b не соответствует указанному типу результата, передается исключение overflow_error |
b.to_string(zero, one) | Возвращает строку, представляющую битовую схему набора b . Параметры zero и one имеют по умолчанию значения '0' и '1' . Они используют для представления битов 0 и 1 в наборе b |
os << b | Выводит в поток os биты набора b как символы '0' и '1' |
is >> b | Читает символы из потока is в набор b . Чтение прекращается, когда следующий символ отличается от 1 или 0 либо когда прочитано b.size() битов |