un mapa de bits en c++: ¿unsigned int hará el trabajo?
-
12-11-2019 - |
Pregunta
Tengo miedo de admitir que no he usado C++ desde hace un tiempo, pero me temo que tengo que hacerlo ahora y estoy un poco oxidado.
Necesito tener un mapa de bits, y me importa el rendimiento, el tamaño de mi mapa de bits ya no será de 25 bits.
Estaba pensando en usar unsigned int, pero me temo que no recuerdo cómo se implementa en c/c++.
¿Se implementa unsigned int como un número binario normal?
También estoy abierto a cualquier otra sugerencia para un mapa de bits.
gracias de antemano por la ayuda!
Solución
Utilice un std::bitset<25>
desde el encabezado <bitset>
. bitset
se puede indexar con []
y es una plantilla, por lo que probablemente se expanda a solo una unsigned int
(o equivalente) con todas las operaciones en línea.
Otros consejos
Ha considerado std::conjunto de bits de <bitset>
¿archivo de cabecera?
Ejemplo:
#include <iostream>
#include <bitset>
int main() {
std::bitset<25> bits(146);
std::cout << bits << std::endl;
//using operator[] to access individual bit manually!
for(size_t i = 0 ; i < bits.size() ; ++i)
std::cout << bits[i] << " ";
return 0;
}
Producción:
0000000000000000010010010
0 1 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Nota: bits[0]
es el bit menos significativo, mientras que bits[bits.size()-1]
¡Es lo más significativo!
Demostración en línea: http://ideone.com/3sSF0
Considere una bitset en su lugar.
Debería poder utilizar un tipo entero para un mapa de bits, suponiendo que tenga suficientes bits para usted.
Sin embargo, hay una <bitset>
en la biblioteca estándar.