std::bitset
Основные идеи std::bitset
std::bitset полезен для представления и работы с битовыми масками, флагами и другими подобными структурами. Он предоставляет удобные методы для установки, очистки, инверсии и получения значений битов.
Объявление и инициализация
std::bitset объявляется с указанием количества битов. Вот несколько способов инициализации:
#include <bitset>#include <iostream>
int main() { std::bitset<8> b1; // Все биты обнулены (00000000) std::bitset<8> b2(42); // Инициализация числом (00101010) std::bitset<8> b3("1100"); // Инициализация строкой (00001100)
std::cout << "b1: " << b1 << std::endl; std::cout << "b2: " << b2 << std::endl; std::cout << "b3: " << b3 << std::endl;
return 0;}Основные методы
std::bitset предоставляет множество методов для работы с битами:
Установка и очистка битов
set(): Устанавливает все биты в 1.set(size_t pos, bool value = true): Устанавливает бит на позицииposв значениеvalue.reset(): Устанавливает все биты в 0.reset(size_t pos): Устанавливает бит на позицииposв 0.flip(): Инвертирует все биты.flip(size_t pos): Инвертирует бит на позицииpos.
Получение значений битов
test(size_t pos): Возвращает значение бита на позицииpos.all(): Проверяет, установлены ли все биты.any(): Проверяет, установлен ли хотя бы один бит.none(): Проверяет, не установлены ли все биты.count(): Возвращает количество установленных битов.
Пример использования методов
#include <bitset>#include <iostream>
int main() { std::bitset<8> b("10101010");
b.set(0); // 10101011 b.reset(1); // 10101001 b.flip(2); // 10101101 bool bit = b.test(3); // true
std::cout << "Bitset: " << b << std::endl; std::cout << "Bit at position 3: " << bit << std::endl; std::cout << "All bits set: " << b.all() << std::endl; std::cout << "Any bit set: " << b.any() << std::endl; std::cout << "No bits set: " << b.none() << std::endl; std::cout << "Number of set bits: " << b.count() << std::endl;
return 0;}Побитовые операции
std::bitset поддерживает стандартные побитовые операции: AND (&), OR (|), XOR (^), сдвиги влево (<<) и вправо (>>).
#include <bitset>#include <iostream>
int main() { std::bitset<8> b1("1100"); std::bitset<8> b2("1010");
std::bitset<8> b_and = b1 & b2; // 1000 std::bitset<8> b_or = b1 | b2; // 1110 std::bitset<8> b_xor = b1 ^ b2; // 0110 std::bitset<8> b_left_shift = b1 << 2; // 00001100 std::bitset<8> b_right_shift = b1 >> 2; // 0011
std::cout << "b1 AND b2: " << b_and << std::endl; std::cout << "b1 OR b2: " << b_or << std::endl; std::cout << "b1 XOR b2: " << b_xor << std::endl; std::cout << "b1 left shift: " << b_left_shift << std::endl; std::cout << "b1 right shift: " << b_right_shift << std::endl;
return 0;}Заключение
std::bitset в C++ — это мощный инструмент для работы с фиксированными последовательностями битов. Он предоставляет методы для установки, очистки, инверсии и получения значений битов, а также поддерживает побитовые операции. std::bitset полезен для управления битовыми масками, флагами и другими подобными структурами, обеспечивая удобный и эффективный интерфейс.