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


Класс bitset - часть 2


Изменить значение отдельного бита можно двумя способами: воспользовавшись функциями set() и reset() или индексом. Так, следующий цикл выставляет в 1 каждый четный бит:

for ( int index=0; index<32; ++index )

    if ( index % 2 == 0 )

        bitvec[ index ] = 1;

Аналогично существует два способа проверки значений каждого бита – с помощью функции test() и с помощью индекса. Функция () возвращает true, если соответствующий бит равен 1, и false в противном случае. Например:

if ( bitvec.test( 0 ))

    // присваивание bitvec[0]=1 сработало!;

Значения битов с помощью индекса проверяются таким образом:

cout << "bitvec: включенные биты:\n\t";

for ( int index = 0; index < 32; ++-index )

    if ( bitvec[ index ] )

        cout << index << " ";

cout << endl;

Следующая пара операторов демонстрирует сброс первого бита двумя способами:

bitvec.reset(0);

bitvec[0] = 0;

Функции set() и reset()

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

// сброс всех битов

bitvec.reset();

if (bitvec.none() != true)

// что-то не сработало

// установить в 1 все биты вектора bitvec

if ( bitvec.any() != true )

    // что-то опять не сработало

Функция flip()

меняет значение отдельного бита или всего битового вектора:

bitvec.f1ip( 0 );  // меняет значение первого бита

bitvec[0].flip();  // тоже меняет значение первого бита

bitvec.flip();     // меняет значения всех битов

Существуют еще два способа определить объект типа bitset. Оба они дают возможность проинициализировать объект определенным набором нулей и единиц. Первый способ – явно задать целое беззнаковое число как аргумент конструктору. Начальные N позиций битового вектора получат значения соответствующих двоичных разрядов аргумента. Например:

bitset< 32 > bitvec2( Oxffff );

инициализирует bitvec2

следующим набором значений:

00000000000000001111111111111111




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