Frage

Wie beurteilen Sie die XOR bitweise Operation tun, wenn Sie nur zur Verfügung, haben die AND und der ODER-Operationen?

War es hilfreich?

Lösung

Erstellen von meinem eigenen Skriptsprache - ChrisScript - Sie brauchen nur so etwas wie:

#!/bin/chrish

bit XOR (bit A, bit B)
{
   bit notA;
   bit notB;

   IF (A == 0) notA = 1 ELSE notA = 0;
   IF (B == 0) notB = 1 ELSE notB = 0;

   F = ((A && notB) || (notA && B));

   RETURN F;
}

Auch ohne nicht, kann es so emuliert werden. Aber dies ist die beste Lösung, wirst du erhalten, ohne irgendeine Form von Inverter. Ich finde es Ihnen schwer zu glauben, nicht irgendeine Form von Inverter Availble haben - was Scripting-Umgebung werden Sie mit

Andere Tipps

Wahrheitstabelle für AND

  A  B  AND
  T  T  T
  T  F  F
  F  T  F
  F  F  F
  

Wahrheitstabelle für OR

  A  B  OR
  T  T  T
  T  F  T
  F  T  T
  F  F  F
  

Wahrheitstabelle für XOR

  A  B  XOR
  T  T  F
  T  F  T
  F  T  T
  F  F  F
  

So, XOR ist wie OR, außer falsch es ist, wenn A und B wahr ist.

Also, (A oder B) und (NOT (A und B)), die (A oder B) und (A NAND B)

  A  B  OR  AND NAND [(A OR B) AND (A NAND B)]
  T  T  T    T    F        F
  T  F  T    F    T        T
  F  T  T    F    T        T
  F  F  F    F    T        F
  

Nicht sicher, ob es ohne NOT oder NAND getan werden kann,

"Die Systeme ({T, F}, und) und ({T, F} oder) sind Monoide."

"Das System ({T, F}, xor) ist eine abelsche Gruppe", die die Eigenschaft Umkehrbarkeit im Gegensatz zu Monoide hat.

Daher ‚und‘ und ‚oder‘ nicht bestanden ‚xor‘ Betrieb zu konstruieren.

Quelle: https://en.wikipedia.org/wiki/Exclusive_or#Relation_to_modern_algebra

Wenn Sie arithmetische Operatoren wie + und - zusätzlich müssen bitweise AND (&) und OR (|), dann können Sie bitweise XOR wie folgt tun:

int bitwise_XOR(int a, int b)
{
    return (a + b) - (a & b) - (a & b);
}

Der Grund dieser Arbeiten ist, dass wir einen vollen Zusatz tun, die XOR-äquivalent ist, wenn die Summe für amy gegebene Bitposition <= 1 ist, und dann für den Fall, wir korrigieren, wo ein Übertrag erzeugt wird (1 + 1) durch 2 * (a & b) subtrahiert wird.

Beachten Sie, dass dies funktioniert, wenn auch die Zwischen Begriffe Überlauf, vorausgesetzt, wir haben „normal verhielten sich“ ganze Zahlen (2-Komplement, Modulo 2 Wraparound für Überlauf usw.).

Wikipedias Eintrag auf XOR im Detail über diese hinausgeht. Wahrscheinlich eine gute erste Stelle zu prüfen, bevor du eine Frage SO aksing.

Wenn Sie bereits Bits haben Sie kümmern sich nicht um maskiert, wie es mir scheint der einfachste Weg, es zu tun (soweit das Schreiben von Code geht sowieso) ist nur Ihre nicht gleich Operator verwenden.

(a XOR b) = ((a OR b) - (a AND b)), oder in anderen Worten, die Vereinigungsmenge minus der Schnittmenge.

Codebeispiel (in Javascript):

var a = 5;
var b = 12;
var xor = (a | b) - (a & b); // result: 9

C: x ^ y = (x & ~y) | (~x & y)

Ich bin mir ziemlich sicher, dass die Formel korrekt sind:

a xor b = nicht ((a und b) oder nicht (a + b))

Der beste Ratschlag ist XOR nachschlagen in Referenzhandbüchern und Enzyklopädie-Seiten im Netz und dann Code schreiben oder Skript, das macht das gleiche wie die Beschreibung dessen, was ein XOR eingebaute Funktion hat und die eigenen Rückgabe oder Statuswerte verwenden. Wir können nicht sagen, wie diese Art von wenig zu tun, vergleicht innerhalb der Software-Gemeinschaft.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top