C++ 带条件的逻辑AND运算符

C++ 带条件的逻辑AND运算符,c++,bitmap,bit-manipulation,bitwise-operators,C++,Bitmap,Bit Manipulation,Bitwise Operators,给定一个阈值T和一组位图,我想创建一个结果位图“br”,这样,只有在>=T位图中将第I位设置为1时,“br”的第I位才设置为1 我将试着用一个例子来说明我的问题: 假设我们有4个位图(等长),T=3: b1 (10000) b2 (01110) b3 (10110) b4 (00010) 然后我的结果位图br=(00010)-因为在>=3位图中只有第4位被设置为1。如果T=2,则br=(10110) 一种简单的方法是迭代每个位图,并在第i个索引中保留一个存储位“i”计数的向量。之后,可以迭代这

给定一个阈值T和一组位图,我想创建一个结果位图“br”,这样,只有在>=T位图中将第I位设置为1时,“br”的第I位才设置为1

我将试着用一个例子来说明我的问题: 假设我们有4个位图(等长),T=3:

b1 (10000)
b2 (01110)
b3 (10110)
b4 (00010)
然后我的结果位图br=(00010)-因为在>=3位图中只有第4位被设置为1。如果T=2,则br=(10110)

一种简单的方法是迭代每个位图,并在第i个索引中保留一个存储位“i”计数的向量。之后,可以迭代这个“计数”向量

另一种方法(我认为)是实现修改后的逻辑AND运算符,这样,在生成的位图中,如果第I位在>=T位置被设置为1,则第I位被设置为1

还有其他有效的方法吗?我使用C++和EWAHBoolArray()库。目前,它们无法在多个位图之间执行AND操作。
非常感谢您的回复

您可以通过一些旋转和添加来实现这一点。你真的是想得到单个比特的总和。为了使用普通加法实现这一点,您需要为每列可以获得的最大总和留出空间。通过使用遮罩将每个值拆分为3个部分来实现。然后添加一个常数,确保所需的和设置高位,然后可以将其屏蔽掉

b1a = b1 & 0b01001;
b1b = (b1 >> 1) & 0b01001;
b1c = (b1 >> 2) & 0b01001;
b2a = b2 & 0b01001;
...
bra = ((b1a + b2a + b3a + b4a + 0b01001) & 0b100100) >> 2;
brb = ((b1b + b2b + b3b + b4b + 0b01001) & 0b100100) >> 1;
brc = ((b1c + b2c + b3c + b4c + 0b01001) & 0b100100);
br = bra | brb | brc;

可以有多个位图D,这样Dj是位图B之和的第j位(也就是说,Dj的第i位是二进制数的第j位,二进制数是(集合B的)位图的数量,位图的位置i为1)。在你的例子中,它们将是{(01010)(10110)(00000)}。一个可怕的问题,请阅读。