Многократное назначение на одной строке не работает должным образом
Я пытаюсь обменять два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
для последнего назначения?