По коду в исходном посте. Работает это так:
a = 3; b = 2; // a = 11; b = 10 - в двоичной
a = a xor b; // 11 xor 10 = 01 -> 1
b = b xor a; // 10 xor 01 = 11 -> 3
a = a xor b; // 01 xor 11 = 10 -> 2
Переводим числа в двоичную, делаем побитовый xor. К слову, преподаватель по базам данных рассказывал, что когда создавали Java, подобную задачу (своп без дополнительной переменной) давали программистам при отборе, чтобы найти людей с нестандартным мышлением. Правда или нет - я не знаю, но задача интересна для людей, которые еще не сталкивались с подобным
Ответить
Развернуть ветку
Нервный велосипед
Если кто забыл\не знал про то, почему это так работает:
"a ^= b ^= a ^= b" вычисляется справа налево.
a1 <- a ^ b
b1 <- b ^ a1 - т.е. b1 <- b ^ (a ^ b )
a2 <- a1 ^ b1 - т.е. (a ^ b) ^ (b ^ a ^ b)
b1 - это новое значение b, и a2 - новое значение a.
xor - операция ассоциативная и коммутативная, т.е. все скобки можно выкинуть и вычислять выражение в любом удобном порядке. Напоминаю, что
0 ^ 0 = 0
1 ^ 0 = 0 ^ 1 = 1
1 ^ 1 = 0.
Кроме того, есть интересные свойства(чекайте по табличке истинности выше):
x ^ x = 0 (всегда)
x ^ 0 = x
Получаем,
b ^ (a ^ b ) = b ^ b ^ a = 0 ^ a = a - это новое значение b.
(a ^ b) ^ (b ^ b ^ a) = (a ^ a) ^ (b ^ b) ^ b = 0 ^ 0 ^ b = 0 ^ b = b - это новое значение a.
Комментарий недоступен
всегда ржу с этого в js, хоть он мне и нравится)
Комментарий недоступен
Меня всегда пугали самоуверенные безумцы, устраивающие пятничные деплои
Ну как бы в субботу с воскресеньем тоже грешновато...
Сообщения об ошибках в C++ (особенно в шаблонах):
https://codegolf.stackexchange.com/questions/1956/generate-the-longest-error-message-in-c
Комментарии в коде страниц TJ.
Комментарий недоступен
PHP
Комментарий недоступен
По коду в исходном посте. Работает это так:
a = 3; b = 2; // a = 11; b = 10 - в двоичной
a = a xor b; // 11 xor 10 = 01 -> 1
b = b xor a; // 10 xor 01 = 11 -> 3
a = a xor b; // 01 xor 11 = 10 -> 2
Переводим числа в двоичную, делаем побитовый xor. К слову, преподаватель по базам данных рассказывал, что когда создавали Java, подобную задачу (своп без дополнительной переменной) давали программистам при отборе, чтобы найти людей с нестандартным мышлением. Правда или нет - я не знаю, но задача интересна для людей, которые еще не сталкивались с подобным
Если кто забыл\не знал про то, почему это так работает:
"a ^= b ^= a ^= b" вычисляется справа налево.
a1 <- a ^ b
b1 <- b ^ a1 - т.е. b1 <- b ^ (a ^ b )
a2 <- a1 ^ b1 - т.е. (a ^ b) ^ (b ^ a ^ b)
b1 - это новое значение b, и a2 - новое значение a.
xor - операция ассоциативная и коммутативная, т.е. все скобки можно выкинуть и вычислять выражение в любом удобном порядке. Напоминаю, что
0 ^ 0 = 0
1 ^ 0 = 0 ^ 1 = 1
1 ^ 1 = 0.
Кроме того, есть интересные свойства(чекайте по табличке истинности выше):
x ^ x = 0 (всегда)
x ^ 0 = x
Получаем,
b ^ (a ^ b ) = b ^ b ^ a = 0 ^ a = a - это новое значение b.
(a ^ b) ^ (b ^ b ^ a) = (a ^ a) ^ (b ^ b) ^ b = 0 ^ 0 ^ b = 0 ^ b = b - это новое значение a.
[a, b] = [b, a]
Комментарий недоступен
Комментарий недоступен
Комментарий недоступен
существование вот этого https://ru.wikipedia.org/wiki/Операторы_в_C_и_C%2B%2B#Синонимы_операторов_в_C++
Использую обычно словесные аналоги, как в питоне. Мне кажется, что они более читабельные. Правда не знал, что есть and_eq и типа того.
Комментарий недоступен
Комментарий недоступен
Комментарий недоступен
Комментарий недоступен
Комментарий недоступен
Комментарий недоступен
Комментарий недоступен
Комментарий недоступен
https://ru.wikipedia.org/wiki/K_(%D1%8F%D0%B7%D1%8B%D0%BA_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F)
Как насчет подсайта "Разработка"?
А что тут странного? Бинарная инверсия и маской выступают обе переменные друг для друга.
Комментарий недоступен
ЖС вам не питон!
Это вам не то!
Комментарий недоступен
Комментарий недоступен
Комментарий недоступен
Комментарий недоступен
Комментарий недоступен
Комментарий недоступен
Комментарий недоступен
Комментарий недоступен
Комментарий недоступен
Комментарий недоступен
Комментарий недоступен
Комментарий недоступен
Комментарий недоступен
Знаю как переименовать папку на рабочем столе.
i = i++ + ++i;
Из моего кода, в день, когда я думал жопой:
var dict = new Dictionary<string, Tuple<List<Tuple<Tuple<string, string>, List<string>>>, List<string>>>
{ {
currSection, new Tuple<List<Tuple<Tuple<string, string>, List<string>>>, List<string>>(new List<Tuple<Tuple<string, string>, List<string>>>(), new List<string>())
} };
https://github.com/NightmareZ/Makarov-INI-to-XML-Converter/blob/master/Program.cs