Как показано на answer of dasblinkenlight, xor
можно эмулировать с nand
, состоящий из not
и and
. Аналогично, xor
можно эмулировать с помощью nor
, состоящего из not
и or
.
выражение будет выглядеть немного сложное, в конце концов ...
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));
}
}
Но я не могу придумать способ, который делает то же самое «только» с изменениями или другими «новыми комбинациями операторов» - что бы это ни значило, точно ...
так что вы можете заменить xor (^) комбинацией &, | и ~? – Fallen
@Fallen, Да, я думаю, что смогу. Мне было интересно, есть ли принципиально иной подход, а не просто замена XOR более базовыми операторами и использование XOR-обмена снова и снова. Может быть, что-то позволяет сдвигам или более новым комбинациям операторов. – parsecer