Язык программирования C++. Вводный курс


Класс bitset


Таблица 4.4. Операции с классом bitset

Операция

Значение

Использование

test(pos)

Бит pos

равен 1?

a.test(4)

any()

Хотя бы один бит равен 1?

a.any()

none()

Ни один бит не равен 1?

a.none()

count()

Количество битов, равных 1

a.count()

size()

Общее количество битов

a.size()

[pos]

Доступ к биту pos

a[4]

flip()

Изменить значения всех

a.flip()

flip(pos)

Изменить значение бита pos

a.flip(4)

set()

Выставить все биты в 1

a.set()

set(pos)

Выставить бит pos в 1

a.set(4)

reset()

Выставить все биты в 0

a.reset()

reset(pos)

Выставить бит pos в 0

a.reset(4)

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

упрощает работу с битовым вектором. Вот какое выражение нам приходилось писать в предыдущем разделе для того, чтобы “взвести” 27-й бит:

quiz1 |= 1<<27;

При использовании bitset то же самое мы можем сделать двумя способами:

quiz1[27] = 1;

или

quiz1.set(27);

(В нашем примере мы не используем нулевой бит, чтобы сохранить “естественную” нумерацию. На самом деле, нумерация битов начинается с 0.)

Для использования класса bitset

необходимо включить заголовочный файл:

#include <bitset>

Объект типа bitset

может быть объявлен тремя способами. В определении по умолчанию мы просто указываем размер битового вектора:

bitset<32> bitvec;

Это определение задает объект bitset, содержащий 32 бита с номерами от 0 до 31. Все биты инициализируются нулем. С помощью функции any()

можно проверить, есть ли в векторе единичные биты. Эта функция возвращает true, если хотя бы один бит отличен от нуля. Например:

bool is_set = bitvec.any();

Переменная is_set

получит значение false, так как объект bitset по умолчанию инициализируется нулями. Парная функция none()

возвращает true, если все биты равны нулю:

bool is_not_set = bitvec.none();




Начало  Назад  Вперед



Книжный магазин