我有一个 uint8_t
类型的数组。位中的 0 表示“正常”,1 表示“错误”。每个位代表一个不同的系统。
如果检测到任何错误,我必须调用错误函数。我的解决方案如下:
const int arrSize = 3;
void bitComparator() {
uint8_t myArr[arrSize] = {0, 1, 64}; //array storing system status
uint8_t mask; //bit mask
uint8_t maskResult;
for(int i=0; i<arrSize; i++) {
mask = 1; // mask is 0000 0001
for(int j=0; j<8; j++) {
maskResult = mask & myArr[i];
if(maskResult != 0) errFunc(i, j);
mask <<= 1;
}
}
如果 myArr
的宽度为 n,则解决方案的复杂度为 O(n)
。您能否对解决方案的复杂性或效率提出任何改进建议?可能已经没问题了,但我不确定。
注意:我需要知道有错误的位置。
最佳答案
由于您需要为每个设置位调用 errFunc
,因此您需要一个 O(N)
解决方案,因为您必须访问每个位。您可以使用 std::bitset
让生活变得更轻松。这将使代码看起来像
void errFunc(int index, int bit)
{
std::cout << "Error in index " << index << " bit " << bit << "\n";
}
const int arrSize = 3;
void bitComparator()
{
uint8_t myArr[arrSize] = {0, 1, 64}; //array storing system status
for(int i=0; i<arrSize; i++)
{
std::bitset<8> bitset{myArr[i]};
for(int j=0; j<8; j++)
{
if(bitset[j])
errFunc(i, j);
}
}
}
int main()
{
bitComparator();
}
其输出为
Error in index 1 bit 0
Error in index 2 bit 6
关于c++ - 按位比较效率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59216508/