2012-03-15 15 views
5

Tôi đang làm việc trên một chương trình mô phỏng máy. Tôi đã có một vectơ bitets cho bộ nhớ chính, vì vậy mà tôi có thể sử dụng một con trỏ đến vector này, pMemory-> tại (i), để truy cập bất kỳ "từ" cụ thể. Tôi thực sự thích thiết kế vector-of-bitsets, và tôi gắn bó với nó (chương trình này là do ... khoảng 6 giờ, eek!)Thực hành được khuyến cáo cho thao tác bitet là gì?

Tôi đã gặp một số khó khăn khi cố gắng tìm ra làm thế nào để có được bitets trong và ngoài các địa điểm khác nhau (mô phỏng đăng ký và các vị trí bộ nhớ khác, vv), vì vậy tôi đã đọc một số trên bằng cách sử dụng suối. Tôi đã đưa ra điều này:

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

Vì vậy, công trình này và tôi có thể điều chỉnh kỹ thuật này cho phù hợp với chương trình của tôi.

Câu hỏi của tôi là, đây có phải là một ý tưởng hay không? Có điều gì đó cơ bản tôi đang thiếu về việc sử dụng các toán tử bitset >> và < < không? Có thực sự cần thiết để làm tất cả các cuộc tranh cãi thủ công này không?

Ngoài ra, tiếp tuyến, tôi nên làm gì khi sao chép bitet 12 bit vào bitet 16 bit?

Cảm ơn bạn, stackoverflow! Đây là câu hỏi đầu tiên của tôi cho cộng đồng này sau khi nhiều googling. Tôi đánh giá cao những hiểu biết của mọi người!

+0

+1 cho một chương trình trình diễn rất hữu ích. –

Trả lời

9

Bạn đang suy nghĩ quá mức về sự cố. Để sao chép giá trị của một bitet khác, sử dụng toán tử gá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"; 
} 


câu hỏi tiếp tuyến của bạn được trả lời bởi 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

Thực sự quá mức. Cảm ơn bạn đã cho rằng, nó biên dịch và chạy chính xác như mong đợi. – absterge

+0

Bạn được chào đón. Chào mừng bạn đến với StackOverflow! Đừng quên chấp nhận câu trả lời của tôi (nhấp vào dấu kiểm). Sau khi bạn đã chuyển bài tập, hãy xem các câu hỏi mà ** bạn ** có thể trả lời! –

Các vấn đề liên quan