How to parse/read 2 bits at once from a bitset and process it?
I want to create a matrix that compares if 2 values match and populate the matrix with a 0 or 1.
This is what I did. This is for comparing 1 bit from both bitsets.
void bit2mat(bitset<14> ba, bitset<14> bb)
{
// print the bitsets
cout << "a: " << ba << endl;
cout << "b: " << bb << endl;
// print the matrix
for (int i = 0; i < ba.size(); i )
{
for (int j = 0; j < bb.size(); j )
{
if (ba[i] == bb[j])
{
cout << "1 ";
}
else
{
cout << "0 ";
}
}
cout << endl;
}
cout << endl;
}
This gives out
a: 00011100101101
b: 00110000001110
0 1 1 1 0 0 0 0 0 0 1 1 0 0
1 0 0 0 1 1 1 1 1 1 0 0 1 1
0 1 1 1 0 0 0 0 0 0 1 1 0 0
0 1 1 1 0 0 0 0 0 0 1 1 0 0
1 0 0 0 1 1 1 1 1 1 0 0 1 1
0 1 1 1 0 0 0 0 0 0 1 1 0 0
1 0 0 0 1 1 1 1 1 1 0 0 1 1
1 0 0 0 1 1 1 1 1 1 0 0 1 1
0 1 1 1 0 0 0 0 0 0 1 1 0 0
0 1 1 1 0 0 0 0 0 0 1 1 0 0
0 1 1 1 0 0 0 0 0 0 1 1 0 0
1 0 0 0 1 1 1 1 1 1 0 0 1 1
1 0 0 0 1 1 1 1 1 1 0 0 1 1
1 0 0 0 1 1 1 1 1 1 0 0 1 1
How do I make it read 2bits as 1 row and column. I want to get a matrix like this...
a: 00011100101101
b: 00110000001110
00 01 11 00 10 11 01
00 1 0 0 1 0 0 0
11 0 0 1 0 0 0 0
00 1 0 0 1 0 0 0
00 1 0 0 1 0 0 0
00 1 0 0 1 0 0 0
11 0 0 1 0 0 1 0
10 0 0 0 0 1 0 0
I know it can be done with vectors and arrays, but I'm working with bitsets. How to do generate this matrix using bitset?
CodePudding user response:
Your loops process one element at a time from each bitset. If you want to process two at a time the loop should go in steps of 2:
for (int i = 0; i < ba.size(); i =2)
Then the two elements to be considered in the iteration are ba[i]
and ba[i 1]
. Same for the bb
loop.
Note that the if
and printing in your code can be simplified to just std::cout << (ba[i] == bb[j]);
. Comparing pairs of bits and adding the headers, this is how it could be done:
#include <bitset>
#include <iostream>
void bit2mat(std::bitset<14> ba, std::bitset<14> bb) {
// print the bitsets
std::cout << "a: " << ba << std::endl;
std::cout << "b: " << bb << std::endl;
// print the matrix
std::cout << " \t";
for (int i=0; i < bb.size(); i =2) std::cout << bb[i] << bb[i 1] << " ";
std::cout << "\n";
for (int i = 0; i < ba.size(); i =2)
{
std::cout << ba[i] << ba[i 1] << "\t";
for (int j = 0; j < bb.size(); j =2)
{
std::cout << (ba[i] == bb[j] && ba[i 1] == bb[j 1]) << " ";
}
std::cout << std::endl;
}
std::cout << std::endl;
}
int main() {
std::bitset<14> a{"00011100101101"};
std::bitset<14> b{"00110000001110"};
bit2mat(a,b);
}