Какая практика рекомендуется для манипулирования битами? - PullRequest
5 голосов
/ 15 марта 2012

Я работаю над программой симуляции машины.У меня есть вектор наборов битов для основной памяти, так что я могу использовать указатель на этот вектор, pMemory-> at (i), чтобы получить доступ к любому конкретному «слову».Я действительно предпочитаю дизайн вектора битовых наборов, и я придерживаюсь его (эта программа должна ... через 6 часов, эй!)

У меня были некоторые проблемы при попыткеВыясните, как получать наборы битов из разных мест (симулированные регистры и другие области памяти и т. д.), поэтому я ознакомился с некоторыми вопросами об использовании потоков.Я придумал это:

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

Итак, это работает, и я могу адаптировать эту технику для своей программы.

Мои вопросы, это хорошая идея?Есть ли что-то фундаментальное, что я упускаю при использовании операторов bitset >> и <<?Действительно ли необходимо выполнять все эти ручные споры? </p>

Кроме того, что нужно делать при копировании 12-битного набора в 16-битный набор?Это мой первый вопрос к сообществу после много поиска в Google.Я ценю понимание каждого!

1 Ответ

9 голосов
/ 15 марта 2012

Вы переосмысливаете проблему.Чтобы скопировать значение одного набора битов в другой, используйте оператор присваивания.

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

  targetBits = sourceBits;

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

На ваш тангенциальный вопрос отвечает 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";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...