0
votes

Opérateurs Bitwise: Utiliser uniquement et et ~ pour obtenir ^

J'ai été coincé sur un bonus mon professeur donné pendant quelques jours maintenant:

  • donner x ^ y en utilisant uniquement ~ et &
  • supposons que la machine utilise des twos complément, des représentations 32 bits d'entiers.

    J'ai essayé de nombreuses combinaisons différentes et j'ai également essayé d'écrire la logique de l'opérateur ^, mais cela n'a pas travaillé. Toute astuce ou aide serait très appréciée!


3 Réponses :


3
votes

L'opérateur XOR peut en fait être écrit comme une combinaison de ces deux, je vais mettre cela en deux étapes:

un NAND B = NON (A et B)

un XOR B = (une NAND (NAND B)) NAND (B NAND (A NAND B))

Comme décrit avant de mathématiques:

https://math.stackexchange.com / QUESTIONS / 38473 / IST-XOR-A-Combinaison-de-et-- non-opérateurs


4 commentaires

C'est beaucoup d'opérations!


Je vais volontiers golf que dans quelques jours, quand il a passé sa date de soumission.


@Jerryjeremiah La raison de la mise en œuvre de cela en termes de NAND seule est que son moins cher (dans le matériel) d'avoir beaucoup d'une porte d'une porte que de petits nombres de différents types de portes. Vous ne réécrivez pas XOR en termes de NAND, car vous essayez d'optimiser une implémentation logicielle.


@cheppner Bien sûr, mais Wikipedia a une version de quatre portes NAND. Je suis d'accord pour dire qu'une version de cinq portes implémente la "définition" de XOR plus idiomatiquement, mais il reste encore beaucoup plus de portes ...



3
votes

Tout d'abord, supposons que vous ayez chacun des & , | et ~ opérateurs disponibles pour vous. Pourriez-vous mettre en œuvre ^ de cette façon?

Ensuite, voir si vous pouvez trouver un moyen d'exprimer | purement en termes de et et ~ . .

Enfin, combinez ces idées ensemble.

bonne chance!


2 commentaires

Quelqu'un a déjà posté la réponse, mais j'aime votre style parce que cela me fait comprendre en la prouvant moi-même. Je vais essayer cela puis voir si je peux arriver à la réponse par moi-même. Merci beaucoup!


OP demandée "Toute astuce ou aide serait très appréciée!" Et ce post répond que.



2
votes

Vous pouvez essayer de dessiner les tables de vérité pour xor strong>, et strong>, et, ou strud> xxx pré>

Suivant Trouver comment utiliser | code> et & code> pour créer ce p>

A | B code> Donnez toutes les trois premières lignes correctes , A & B code> Donnez à l'autre ligne. Si nous nions, il peut être utilisé pour masquer les lignes recherchées! Nous pourrions donc expression xor comme: p>

(un ou stry> b) mais em> pas fort> quand (un et b) p>

Il n'y a pas mais em> dans l'algèbre booléenne de sorte qu'il devient un et strong> qui conduit à ceci: p>

~(~a&~b)&~(a&b)


1 commentaires

Lire la question ;-)