2012-03-15 17 views
5

Sto lavorando a un programma di simulazione macchina. Ho un vettore di bitset per la memoria principale, in modo che possa usare un puntatore a questo vettore, pMemory-> at (i), per accedere a qualsiasi "parola" specifica. Preferisco davvero il design del vettore di bitset, e lo sto rispettando (questo programma è previsto in ... circa 6 ore, eek!)Qual è la pratica consigliata per la manipolazione di bitset?

Ho avuto qualche problema nel tentativo di capire come ottenere bitset dentro e fuori da posizioni diverse (registri simulati e altre posizioni di memoria, ecc.), quindi ho letto alcuni sull'utilizzo degli stream. Ho inventato questo:

#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; 
} 

Quindi, questo funziona e posso adattare questa tecnica per adattarla al mio programma.

Le mie domande sono, è una buona idea? C'è qualcosa di fondamentale che mi manca nell'usare gli operatori bitset >> e < <? È davvero necessario fare tutto questo litigi manuale?

Inoltre, in senso tangenziale, cosa devo fare quando si copia un bitet a 12 bit in un set di bit a 16 bit?

Grazie, stackoverflow! Questa è la mia prima domanda a questa comunità dopo molto googling. Apprezzo le intuizioni di tutti!

+0

+1 per un programma dimostrativo utile. –

risposta

9

Stai pensando troppo al problema. Per copiare il valore di un bitet su un altro, utilizzare l'operatore di assegnazione.

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

    targetBits = sourceBits; 

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


tua domanda tangenziale si risponde con 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

Overthinking davvero. Grazie per questo, ha compilato e eseguito esattamente come previsto. – absterge

+0

Prego. Benvenuto in StackOverflow! Non dimenticare di accettare la mia risposta (fai clic sul segno di spunta). Dopo aver consegnato il tuo incarico, cerca le domande che ** tu ** puoi rispondere! –

Problemi correlati