Wie im answer of dasblinkenlight gezeigt ist, kann ein mit xor
nand
emuliert werden, und von not
and
besteht. Analog kann die xor
mit nor
, bestehend aus not
und or
emuliert werden.
Die Ausdrücke ein wenig komplex am Ende aussehen ...
public class XorTest
{
public static void main(String[] args)
{
testNand();
testNor();
}
private static void testNand()
{
int a = 1234;
int b = 5678;
a = xorNand(a, b);
b = xorNand(b, a);
a = xorNand(a, b);
System.out.println(a);
System.out.println(b);
}
private static void testNor()
{
int a = 1234;
int b = 5678;
a = xorNor(a, b);
b = xorNor(b, a);
a = xorNor(a, b);
System.out.println(a);
System.out.println(b);
}
private static int xorNand(int a, int b)
{
return ~(~(a & ~(a & b)) & ~(b & ~(a & b)));
}
static int xorNor(int a, int b)
{
return ~(~(~(a | a) | ~(b | b)) | ~(a | b));
}
}
Aber ich kann von einer Art und Weise nicht denken, dass das gleiche tut „nur“ mit Verschiebungen oder anderen „neuen Kombinationen von Operatoren“ - was auch immer das bedeuten soll, genau ...
also kannst du xor (^) durch eine Kombination von &, | ersetzen und ~? – Fallen
@Fallen, Ja, ich denke ich kann. Ich habe mich gefragt, ob es einen grundlegend anderen Ansatz gibt, nicht nur das Ersetzen von XOR durch grundlegendere Operatoren und das erneute Verwenden von XOR-Austausch. Vielleicht etwas, das Verschiebungen oder neuere Kombinationen von Operatoren erlaubt. – parsecer