Я пытаюсь поменять местами два int
- x
и y
в примере и сделать это в одной строке без библиотечной функции.
Итак, я начал с этого:
int x = 4;
int y = 3;
System.out.println(x);
System.out.println(y);
x ^= y;
System.out.println(x);
System.out.println(y);
y ^= x;
System.out.println(x);
System.out.println(y);
x ^= y;
System.out.println(x);
System.out.println(y);
Вывод был 4, 3, 7, 3, 7, 4, 3, 4
, как ожидалось. Все хорошо до сих пор.
Далее было следующее:
int x = 4;
int y = 3;
System.out.println(x);
System.out.println(y);
y ^= (x ^= y);
System.out.println(x);
System.out.println(y);
x ^= y;
System.out.println(x);
System.out.println(y);
Результат был 4, 3, 7, 4, 3, 4
, как и ожидалось еще раз. До сих пор хорошо.
Тогда, наконец, это:
int x = 4;
int y = 3;
System.out.println(x);
System.out.println(y);
x ^= (y ^= (x ^= y));
System.out.println(x);
System.out.println(y);
На этом этапе выход стал 4, 3, 0, 4
. Теперь я знаю, что 0
является результатом 4 ^ 4
, потому что назначение x
в то время не было полным - почему это происходит? Почему x ^= y
не присваивает 7
переменной x
, чтобы она стала 7 ^ 4
для последнего назначения?