2010-11-05 31 views
1

Existe-t-il une opération de bits ou une série d'opérations de bits qui me donneraient le résultat suivant?Question d'opération de bit

Je vais montrer ce que je veux en utilisant des exemples. On notera que la longueur de chaque chaîne de bits est sans importance:

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 

Donc, l'idée est que si partout dans la première chaîne , un 1 chevauche avec un 1 dans le sec Dans le résultat, 1s apparaissent partout à l'exception de la position où les 1 se chevauchent.

Répondre

2

Pseudo:

if (a & b) 
    return ~(a & b) 
else 
    return 0 
-2

avez-vous besoin d'une seule opération sur la liste entière des bits ou vous pouvez itérer sur le couple un bit un par un? si c'est le cas, c'est trivial, sinon, je crois qu'il y a une fonction booléenne binaire qui le fait exactement (parmi les 16)

2

Vous pouvez utiliser un code à barres bit à bit, c'est-à-dire bitwise AND annulé pour obtenir tout sauf le cas 2 , 3 et 7.

Si vous devez absolument avoir ces deux cas, vous pourriez faire

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; 
} 

Si vous faites cela, cependant, vous devez réaliser que vous avez aucun moyen de dire le cas 2/3/7 à partir du cas 8.

+1

Je ne pense pas que le cas 7 soit une NAND non plus. 7 ressemble à un ET bit à bit, mais serait également couvert par votre exemple. –

+0

En effet, manqué celui-là. Fixé. –

+0

+1 pour ne pas répéter l'expression 'a & b'. – Alnitak

0

IIRC, un moyen fiable de faire comme par exemple de conversion à partir des données de résultat de l'opération que vous avez à la logique numérique est appelée « Karnaugh Map »: vous commencez avec les données, appelée « Table de vérité », et fin avec la logique numérique nécessaire. Bien sûr, à partir de cela, vous pouvez convertir dans n'importe quel langage de programmation étant donné les opérateurs/conventions bit-wise spécifiques à la langue.

+0

Je doute que la carte de Karnaugh aiderait beaucoup dans ce cas, car il est plus trivial de représenter des opérations sur plusieurs bits dans un langage de programmation que c'est avec des portes logiques. – Alnitak