通过比较 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);
}
如何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);
}