2012-03-15 7 views
5

Estoy trabajando en un programa de simulación de máquinas. Tengo un vector de bitsets para la memoria principal, así que puedo usar un puntero a este vector, pMemory-> en (i), para acceder a cualquier "palabra" específica. Realmente prefiero el diseño del vector de bitsets, y me estoy quedando con él (este programa se vence en ... aproximadamente 6 horas, eek!)¿Cuál es la práctica recomendada para la manipulación del conjunto de bits?

He estado teniendo algunos problemas tratando de descubrir cómo hacer entrar y salir conjuntos de bits de diferentes ubicaciones (registros simulados y otras ubicaciones de memoria, etc.), así que he leído algo sobre el uso de transmisiones. He llegado a esto:

#include <bitset> 
#include <iostream> 
#include <sstream> 
#include <string> 

using namespace std; 

int main() 
{ 


    /** demonstrating use of stringstream to/from bitset **/ 
    { 
     bitset<12> sourceBits(std::string("011010010100")); 
     bitset<12> targetBits(0); 

     stringstream iBits(stringstream::in | stringstream::out); 

     iBits << sourceBits.to_string(); 
     cout << targetBits << endl; 
     iBits >> targetBits; 
     cout << targetBits << endl; 
    } //end stringstream to/from bitset 

    return 0; 
} 

Por lo tanto, esto funciona, y puedo adaptar esta técnica para adaptarse a mi programa.

Mis preguntas son, ¿es esta una buena idea? ¿Hay algo fundamental que me falta sobre el uso de los operadores bitset >> y < <? ¿Es realmente necesario hacer todas estas discusiones manuales?

Además, tangencialmente, ¿qué debo hacer al copiar un conjunto de bits de 12 bits en un conjunto de bits de 16 bits?

Gracias, stackoverflow! Esta es mi primera pregunta a esta comunidad después de mucho googleando. Aprecio las ideas de todos!

+0

+1 para un programa de demostración de utilidad. –

Respuesta

9

Está pensando demasiado en el problema. Para copiar el valor de un conjunto de bits a otro, use el operador de asignación.

#include <iostream> 
#include <bitset> 
int main() { 
    std::bitset<12> sourceBits(std::string("011010010100")); 
    std::bitset<12> targetBits(0); 

    targetBits = sourceBits; 

    std::cout << targetBits << "\n"; 
} 


Su pregunta es contestada por tangencial bitset::to_ulong:

#include <iostream> 
#include <bitset> 

int main() { 
    std::bitset<12> sourceBits(std::string("011010010100")); 

    std::bitset<16> sixteen; 
    sixteen = sourceBits.to_ulong(); 
    std::cout << sixteen << "\n"; 
} 
+0

Pensándolo bien. Gracias por eso, compiló y ejecutó exactamente como se esperaba. – absterge

+0

De nada. Bienvenido a StackOverflow! No olvides aceptar mi respuesta (haz clic en la marca de verificación). Después de entregar su tarea, ¡busque preguntas que ** usted ** pueda responder! –

Cuestiones relacionadas