我有16个不相关的二进制字符串(长度相同)。如。100000001010, 010100010010等等,我需要找出一个位串,其中位置x是1,如果位置x在16个位串中至少有2个位串为1。
最初,I尝试使用按位异或,只要偶数个字符串包含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
我知道我错了,但我不知道如何进行非常感谢您的帮助
你可以这样做
unsigned once = x[0], twice = 0;
for (int i = 1; i < 16; ++i) {
twice |= once & x[i];
once |= x[i];
}
(A AND B) OR (A AND C) OR (B AND C)