简体   繁体   English

位数组上的快速 AND 运算

[英]Fast AND operation on bit arrays

What can be a faster algorithm for doing bitwise AND operation on large bit-arrays?在大型位数组上进行按位与运算的更快算法是什么? I have implemented bit-array in C++ using a char array.我已经使用 char 数组在 C++ 中实现了位数组。 For now, I am iterating over each byte and performing AND operation.现在,我正在迭代每个字节并执行 AND 运算。

void ANDoperation(char* A, char* B){
  for (int i=0; i<(array_size/8 +1); i++ ){
    A[i] &= B[i];
  }
}

For K arrays, I am executing this function iteratively K-1 times.对于 K 个数组,我迭代执行此函数 K-1 次。

If you would like to go for a more C++-ish way, I would suggest you using std::bitset in a following manner:如果您想采用更多 C++ 风格的方式,我建议您按以下方式使用std::bitset

#include <iostream>
#include <bitset>

int main()  {
    std::bitset<3> v1(0b110);
    std::bitset<3> v2(0b011);

    v1 &= v2;

    std::cout << v1.to_string() << std::endl; // 010

    return 0;
}

Demo 演示

or as @AndrewBainbridge suggested:或正如@AndrewBainbridge建议的那样:

void and_operation(std::bitset<3000>& v1, std::bitset<3000> const& v2) {
    v1 &= v2;
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM