Binary 16位字符串的逐位比较

Binary 16位字符串的逐位比较,binary,bit-manipulation,bitwise-operators,binary-data,Binary,Bit Manipulation,Bitwise Operators,Binary Data,我有16个不相关的二进制字符串(长度相同)。例如10000001010、010100010010等等,我需要找出一个位串,如果16个位串中至少有2个位串的位置x为1,那么位置x为1 最初,我尝试使用按位异或,只要偶数个字符串包含1,这种方法就很有效,但当奇数个字符串包含1时,给出的答案是相反的 A simple example (with 3 strings) would be: A: 10101010 B: 01010111 C: 11011011 f(A,B,C)= answer Exp

我有16个不相关的二进制字符串(长度相同)。例如10000001010、010100010010等等,我需要找出一个位串,如果16个位串中至少有2个位串的位置x为1,那么位置x为1

最初,我尝试使用按位异或,只要偶数个字符串包含1,这种方法就很有效,但当奇数个字符串包含1时,给出的答案是相反的

A simple example (with 3 strings) would be:
A: 10101010
B: 01010111
C: 11011011

f(A,B,C)= answer

Expected answer: 11011011
Answer I'm getting right now: 11011001
我知道我在某个地方错了,但我不知道该怎么做 非常感谢的帮助(A和B)或(A和C)或(B和C)


这比您原来拥有的复杂度更高。

您可以执行以下操作

unsigned once = x[0], twice = 0;
for (int i = 1; i < 16; ++i) {
    twice |= once & x[i];
    once |= x[i];
}
无符号一次=x[0],二次=0;
对于(int i=1;i<16;++i){
两次|=一次&x[i];
一次|=x[i];
}

但这对于3个或最多4个变量是合乎逻辑的。我有16个。这样做似乎不切实际。。。不是吗?不知道你是如何存储变量的,我真的不知道。如果将它们放在一个N个变量的数组中,那么您的复杂性将是O(N^2),您可以使用嵌套的for循环来实现这一点。