Показать сообщение отдельно
  #1 (permalink)  
Старый 20.10.2012, 10:15
Аватар для Дзен-трансгуманист
√₋̅₁̅
Отправить личное сообщение для Дзен-трансгуманист Посмотреть профиль Найти все сообщения от Дзен-трансгуманист
 
Регистрация: 18.06.2012
Сообщений: 385

XOR swap: ЧЯДНТ?
Нет, я не задрот оптимизации.
Просто мне стало интересно.
var x = 10, y = 20;

x ^= y;
y ^= x;
x ^= y;

alert("x = " + x + ", y = " + y); // Всё ништяк

x = 10; y = 20;

x ^= (y ^= (x ^= y));

alert("x = " + x + ", y = " + y); // WTF???


Аналогичная операция через обычную арифметику:
var x = 10, y = 20;

x += y;
y = x - y;
x -= y;

alert("x = " + x + ", y = " + y); // Всё ништяк

x = 10; y = 20;

x -= (y = (x += y) - y);

alert("x = " + x + ", y = " + y); // И тут та же фигня


Выходит, что и тут и там в самом левом "икс" исходное значение сохраняется вплоть до последней операции, тогда как должно было измениться немедленно при (x ^= y) и (x += y) соответственно.

Это нормально с точки зрения языка?
Если да, то почему, где тут логика, ткните пальцем.

Последний раз редактировалось Дзен-трансгуманист, 20.10.2012 в 10:33.
Ответить с цитированием