c++ - 按位比较效率

标签 c++ algorithm comparison

我有一个 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/

相关文章:

c++ - 如何访问基类的公共(public)数据成员?

algorithm - 是否可以通过同时使用两个比较来计算三个数字中的最小值?

c - 为什么 char comparison "if(c>=' a' && c< ='z' )"不可移植?

c++ - 关于为变量设置新值

c++ - 链接到第三方共享库时出现 g++ undefined reference 错误

algorithm - OpenCV检测网后网球场线

c++ - 位图边界矩形算法 C++

c - If 语句比较开销与赋值开销

c++ - 使用渲染到纹理的多 channel 着色

php - PHP 中的 cargo 算法