2010-11-05 5 views
1

Есть ли бит операция или серия бит операций, которые дали бы мне следующий результат?Вопрос с битовой операцией

Я покажу, что я хочу, используя примеры. Следует отметить, что длина каждой строки битов не имеет значения:

1)

100000 
100000 
------ 
011111 

2)

000000 
000000 
------ 
000000 

3)

100000 
000000 
------ 
000000 

4)

000100 
000100 
------ 
111011 

5)

100100 
100100 
------ 
011011 

6)

100100 
000100 
------ 
111011 

7)

010101 
101010 
------ 
000000 

8)

111111 
111111 
------ 
000000 

Таким образом, идея заключается в том, что если в любом месте в первой строке , a 1 перекрывается с 1 в секунду ond, тогда в результате 1s появляются везде, кроме позиции, где 1s перекрываются.

ответ

-2

Вам нужна одна операция во всем списке бит или вы можете перебирать одну пару бит один за другим? если это так, это тривиально, если нет, я считаю, что существует логическая двоичная функция, которая делает это точно (среди 16 из них)

2

Вы можете использовать побитовое nand, то есть bitwise AND, с отрицанием, чтобы получить все, кроме случая 2 , 3 и 7.

Если вам абсолютно необходимо иметь эти два случая, вы могли бы сделать

result = a & b;  // Bitwise and of the two inputs 
if (result != 0) {  // If we have no matches, we want it to stay 0. 
    result = ~result; 
} 

Если вы сделаете это, тем не менее, вы должны понимать, что у вас нет никакой возможности говорить случай 2/3/7 от случая 8.

+1

Я не думаю, что случай 7 - это NAND. 7 выглядит как побитовое И, но также будет охвачено вашим примером. –

+0

Действительно, пропустил этот. Исправлена. –

+0

+1 для повторения выражения 'a & b'. – Alnitak

0

IIRC, один надежный способ сделать такое преобразование т.е. из данных результата операции вы должны цифровой логики называется «Карта Карно», то есть вы начинаете с данными, называется «Таблица истинности», и в конце с необходимой цифровой логикой. Разумеется, из этого вы можете конвертировать в любой язык программирования с учетом битовых операторов/конвенций, специфичных для языка.

+0

Я сомневаюсь, что карта Карно в этом случае очень помогла, так как это более тривиально представлять операции над несколькими битами на языке программирования, которые есть с логическими воротами. – Alnitak

Смежные вопросы