Un bitset es una matriz de booleanos, pero cada valor booleano no se almacena en un byte separado; bitset optimiza el espacio de modo que cada valor booleano ocupa sólo un espacio de 1 bit , entonces el espacio ocupado por bitset es menor que el de una matriz de bool o vector de bool .
Una limitación del conjunto de bits es que El tamaño debe conocerse en el momento de la compilación, es decir, el tamaño del conjunto de bits es fijo.
std::conjunto de bits es la plantilla de clase para bitset que se define dentro archivo de cabecera por lo que debemos incluir el archivo de encabezado antes de usar bitset en nuestro programa.
Sintaxis:
bitset variable_name(initialization);>
Podemos inicializar bitset de tres maneras:
1. No inicializado: Todos los bits se pondrán a cero.
bitset variable_name;>
2. Inicialización con número entero decimal: Bitset representará el número decimal dado en forma binaria.
bitset variable_name(DECIMAL_NUMBER);>
3. Inicialización con cadena binaria: Bitset representará la cadena binaria dada.
bitset variable_name(string('BINARY_STRING')); bitset variable_name('BINARY_STRING');>Ejemplo:
C++ // C++ program to demonstrate the bitset #include #include using namespace std; int main() { // declaring an uninitialized bitset object bitset<8>Bitset no inicializado; // inicialización con conjunto de bits de número decimal<8>conjunto de bits decimal(15); // inicialización con conjunto de bits de cadena binaria<8>stringBitset(cadena('1111')); corte<< 'Uninitialized bitset: ' << uninitializedBitset << endl; cout << 'Initialized with decimal: ' << decimalBitset << endl; cout << 'Initialized with string: ' << stringBitset << endl; return 0; }> Producción
Uninitialized bitset: 00000000 Initialized with decimal: 00001111 Initialized with string: 00001111>
std::bitset Funciones miembro
La clase std::bitset contiene algunas funciones miembro útiles para trabajar en los objetos bitset. Aquí está la lista de algunas funciones miembro de std::bitset:
Nombre de la función generador de números aleatorios java | Función descriptiva |
|---|---|
colocar() | Selecciona el valor de bit en el índice dado a 1 . |
reiniciar() | Selecciona el valor de bit en un índice dado a 0 . |
voltear() nombre de productos de maquillaje | Voltear el valor del bit en el índice dado. |
contar() | Contar el número de establecer bits . |
prueba() | Devuelve el valor booleano en el índice dado . |
cualquier() | Comprueba si cualquier bit es colocar . |
ninguno() | Comprueba si ninguno bit es colocar. |
todo() | Comprobar si todo bit es colocar. |
tamaño() | Devuelve el tamaño del conjunto de bits. |
Encadenar() | Convierte conjunto de bits a std::string. |
seguir() | Convierte bitset a largo sin firmar. |
to_ullong() | Convierte bitset a largo sin firmar. |
Ejemplo:
C++ // C++ program to demonstrate the // use of std::bitset member // functions #include #include using namespace std; int main() { // declaring index variable int index = 0; // declaring few bitset objects bitset<4>allSet('1111'), allUnset; corte<< 'any() value: ' << boolalpha << allSet.any() << endl; cout << 'all() value: ' << allSet.all() << endl; cout << 'none() value: ' << allSet.none() << endl; cout << 'test() at index 0: ' << noboolalpha << allSet.test(index) << endl; cout << 'size() value: ' << allSet.size() << endl; cout << 'Value of allUnset on before using set(): ' << allUnset << endl; allUnset.set(index); cout << 'Value of allUnset on after using set(): ' << allUnset << endl; cout << 'Value of allSet on before using reset(): ' << allSet << endl; allSet.reset(index); cout << 'Value of allSet on after using reset(): ' << allSet << endl; // declaring an empty string string bitString; // using to_string() method to assign value to empty // string bitString = allSet.to_string(); cout << 'bitString: ' << bitString << endl; cout << 'Unsigned Long value: ' << allSet.to_ulong(); return 0; }> Producción
any() value: true all() value: true none() value: false test() at index 0: 1 size() value: 4 Value of allUnset on before using set(): 0000 Value of allUnset on after using set(): 0001 Value of allSet on before using reset(): 1111 Value of allSet on after using reset(): 1110 bitString: 1110 Unsigned Long value: 14>
Nota: boolalpha se usa para imprimir verdadero y falso en lugar de 1 o 0 para valores booleanos y noboolalpha para lo contrario.
Operadores std::bitset
Algunos de los operadores básicos están sobrecargados para trabajar con objetos bitset. La siguiente es la lista de esos operadores:
Operador | Operación |
|---|---|
[] | Acceso operador |
& estampado de estrellas | Bit a bit Y |
| | Bit a bit O |
! | Bit a bit GRATIS |
>>= | Binario Giro a la derecha y asignar |
<<= | Binario Shift izquierdo y asignar |
&= | Asignar el valor de bit a bit Y al primer conjunto de bits. |
|= | Asignar el valor de bit a bit O al primer conjunto de bits. |
^= | Asignar el valor de bit a bit GRATIS al primer conjunto de bits. |
~ | Bit a bit NO |
Ejemplo:
si no, bucle en javaC++
// C++ program to show the different operator functions on // bitset #include #include using namespace std; int main() = bitset2) << endl; // bitwise NOT cout << 'Bitwise NOT: ' << (result = ~bitset1) << endl; // bitwise XOR bitset1 = 9; cout << 'Bitwise XOR: ' << (bitset1 ^= bitset2) << endl; bitset1 = 9; cout << 'Binary leftshift on bitwise1: ' << (bitset1 <<= 1) << endl; bitset1 = 9; cout << 'Binary rightshift on bitwise1: ' << (bitset1>>= 1)<< endl; return 0;>
Producción
Bitset1: 1001 Bitset2: 1010 Accessing bit value at index 1 of bitset1: 0 Bitwise AND using &: 1000 Bitwise AND using &=: 1000 Bitwise OR using |: 1011 Bitwise OR using |=: 1011 Bitwise NOT: 0100 Bitwise XOR: 0011 Binary leftshift on bitwise1: 0010 Binary rightshift on bitwise1: 0100>
Diferencia entre std::bitset y std::vector y una matriz de bool
El vector de bool y la matriz de bool también se pueden implementar para almacenar una secuencia de valores booleanos como bitset, pero existen algunas diferencias entre cada implementación:
| Parámetro | conjunto de bits | vector de booleano | matriz de booleanos |
|---|---|---|---|
| Definición | Una plantilla de clase que consta de una secuencia de bits almacenados de manera que cada bit ocupe 1 bit de memoria. | Una variación de vectores de C++ STL en la que cada elemento tiene un tamaño de 1 bit y es de tipo bool. | Una colección contigua de tamaño fijo de elementos de datos booleanos. |
| Tamaño | Tamaño fijo. | Tamaño dinámico. | Tamaño fijo. |
| Memoria | Un solo elemento ocupa 1 bit de memoria. | Un solo elemento ocupa 1 bit de memoria. | Un solo elemento ocupa 1 byte de memoria. |
| Velocidad | Mismo | Mismo | Más rápido |