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!

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top