Для представления наборов битов и работы с ними используется стандартный шаблонный класс bitset из заголовка . Каждый объект класса bitset имеет фиксированный размер, указанный при его создании.
bitset<4> flags; bitset<128> dword_bits; bitset<12345> lots;
Объект класса bitset по умолчанию инициализируется одними нулями, но обычно у него есть инициализатор. Инициализаторами объектов класса bitset могут быть целые числа без знака или строки, состоящие из нулей и единиц:
bitset<4> flags = Oxb;
bitset<128> dword_bits(string("l010101010101010")); bitset<12345> lots;
Здесь объект lots будет содержать одни нули, а dword_bits — 112 нулей, за которыми следуют 16 явно заданных битов. Если вы попытаетесь проинициализировать объект класса bitset строкой, состоящей из символов, отличающихся от '0' и '1', то будет сгенерировано исключение std::invalid_argument.
string s; cin>>s;
bitset<12345> my_bits(s); // может генерировать исключение
// std::invalid_argument
К объектам класса bitset можно применять обычные операции над битами. Предположим, что переменные b1, b2 и b3 являются объектами класса bitset.
b1 = b2&b3; // и
b1 = b2|b3; // или
b1 = b2^b3; // xor
b1 = ~b2; // дополнение
b1 = b2<<2; // сдвиг влево
b1 = b2>>3; // сдвиг вправо
По существу, при выполнении битовых операций (поразрядных логических операций) объект класса bitset ведет себя как переменная типа unsigned int, имеющая произвольный, заданный пользователем размер. Все, что можно делать с переменной типа unsigned int (за исключением арифметических операций), вы можете делать и с объектом класса bitset. В частности, объекты класса bitset полезны при вводе и выводе.
cin>>b; // считываем объект класса bitset
// из потока ввода cout<('c'); // выводим битовую комбинацию для символа 'c'
Считывая данные в объект класса bitset, поток ввода ищет нули и единицы. Рассмотрим пример.
10121
Число 101 будет введено, а число 21 останется в потоке.
Как в байтах и в словах, биты в объектах класса bitset нумеруются справа налево (начиная с самого младшего бита и заканчивая самым старшим), поэтому, например, числовое значение седьмого бита равно 27.
Для объектов класса bitset нумерация является не просто соглашением поскольку класс bitset поддерживает индексирование битов. Рассмотрим пример. int main()
{
const int max = 10; bitset b; while (cin>>b) {
cout << b << '\n';
for (int i =0; i
// порядок
cout << '\n';
}
}
Если вам нужна более полная информация о классе bitset, ищите ее в Интернете, в справочниках и учебниках повышенной сложности.
Опубликовал katy
April 26 2015 10:29:03 ·
0 Комментариев ·
3742 Прочтений ·
• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •
Комментарии
Нет комментариев.
Добавить комментарий
Рейтинги
Рейтинг доступен только для пользователей.
Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.
Нет данных для оценки.
Гость
Вы не зарегистрированны? Нажмите здесь для регистрации.