通过比较 2 个位集中的 2 个位来填充矩阵?

Populating matrix by comparing 2 bits from 2 bitsets?

如何parse/read一次从位集中提取 2 个位并进行处理?

我想创建一个矩阵来比较 2 个值是否匹配并用 0 或 1 填充矩阵。

这就是我所做的。这是为了比较两个位集中的 1 位。

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

这给出了

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

如何让它读取 2 位作为 1 行和 1 列。我想得到这样的矩阵...

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

我知道这可以用向量和数组来完成,但我正在使用位集。如何使用 bitset 生成此矩阵?

您的循环一次处理每个位集中的一个元素。如果你想一次处理两个,循环应该按照 2:

for (int i = 0; i < ba.size(); i+=2)

那么迭代要考虑的两个元素是ba[i]ba[i+1]bb 循环也是如此。

请注意,代码中的 if 和打印可以简化为 std::cout << (ba[i] == bb[j]);。比较位对并添加 headers,可以这样做:

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