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
полезен для управления битовыми масками, флагами и другими подобными структурами, обеспечивая удобный и эффективный интерфейс.