товарищи, кто шарит, объясните максимально просто и доходчиво что здесь нужно сделать, я понимаю, что биты тут вообще роли не играют, ибо тут нет значения, но как это всё работает в решении, не понял, заранее благодарю
Роман
51 уровень
непонятна логика
Обсуждается
Комментарии (20)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Yury Kurguz
23 декабря 2024, 11:43
Визуализация свапа
0
Kirill
10 октября 2024, 09:07
простыми словами:
При переходе в класс Solution (сочетание клавиш Alt+1)
Есть условие x=4 y=5.
в двоичной системе у нас:
1 = 1 (001)
2 = 10 (010)
3 = 11 (011)
4 = 100 (100)
5 = 101 (101)
Если мы к ним применяем побитовый оператор XOR (ИСКЛЮЧАЮЩЕЕ ИЛИ)
То получается следующий вид.
х = х ^ y 100 ^ 101 (одинаковые значения = 0, разные значения =1) в нашем случае получается новый x = 001
повторив операцию но теперь для y получим:
y = x ^ y 001 ^ 101 результат y = 100 что соответствует 4 и = первоначальному значению для х.
повторив 1 операцию для x получим:
х = х ^ y 100 ^ 001 результат 101 что соответствует 5 и = первоначальному значению для y.
проверил на других парах чисел результат одинаковый. (возможно это особенности двоичной системы исчисления)
+5
Lizzka
31 октября 2024, 11:00
Спасибо за подробное объяснение!
0
Кирилл
18 декабря 2024, 18:06
но в правильном решение другой ответ x ^= y;
y ^= x;
x ^= y; а не x=x^y
0
Kiawem
14 сентября 2023, 16:14
в этой задачи как раз очень хорошо играют биты, у нас есть 2 числа это 4 и 5, и есть операнд XOR, при помощи него можно поменять местами эти числа, играясь скажем так с их битами
+1
Rohlend1
14 ноября 2022, 19:15
Друзья, все будет работать и без доп. переменной.
x ^= y;
y ^= x;
x ^= y;
По этому поводу есть статья на английском и даже переведенная на хабре XOR trick (:
+13
Алексей Михайлов
16 мая 2023, 19:34
за статью благодарствую!
0
nosochki
5 июня 2022, 12:26
public void swap() {
//напишите тут ваш код
int temp = x;
x = y;
y = temp;
}
+1
KirilX
5 июня 2022, 06:56
Прикрепи своё решение
0
🟡ampersand
5 июня 2022, 06:37
Сперва переводишь два числа в двоичный вид.
При сложении по модулю 2 (он же XOR, он же ^=) двух чисел ты получаешь маску.
При сложении этой маски с первым числом ты получаешь второе, и наоборот.
+5
RomaSky QA Automation Engineer
5 сентября 2022, 02:51
Можно пожалуйста пример кода? 🙏
+1
Стас ПасинковSoftware Developer в ZipyMaster
5 сентября 2022, 08:18
а в чем проблема написать это кодом?
все ведь расписано до деталей
+2
RomaSky QA Automation Engineer
5 сентября 2022, 12:37
Спасибо за "волшебный пинок", озарение пришло не сразу:
int x = 4;
int y = 5;
int mask = x ^ y;
x = x ^ mask;
y = y ^ mask;
+4
Maxim
11 сентября 2022, 08:11
А почему эта операция называется - сложение по модулю 2?
0
🟡ampersand
12 сентября 2022, 07:04
поразрядно складываешь, потом сумму делишь на 2, остаток от деления есть результат.
0
Dmitry
30 октября 2022, 12:43
Спасибо!!
0
ГоффMaster
30 октября 2022, 21:47
Озарение нормальное, но не полное - фишка в том, что бы НЕ использовать третью переменную. Первая строка из трёх:
x = x ^ y;
0
ГоффMaster
31 октября 2022, 00:17
Если поможет понять, как работает с xor, то вот аналогия с суммой.
Зная сумму двух чисел и первое число, можно вычислить второе. Зная сумму и второе, можно вычислить первое.
С XOR аналогично, только там вместо суммы результат побитового исключающего ИЛИ.
+23
FeatHonnar
13 июля 2023, 12:03
Спасибо, с аналогией стала ясна суть происходящего
0
Anonymous #3291313
18 сентября 2023, 18:26
Вот как все работает так скажем внутри системы, то как ты должен был выполнить задачу.
public void swap() {
//напишите тут ваш код
x = x ^ y; // 4 = 100 ^ 101 = 1 - присваивается значение x(1)
y = y ^ x; // 5 = 101 ^ 001 = 100 - присваивается значение y(100)
x = x ^ y; // 4 = 001 ^ 100 = 101 - присваивается значение x(101)
}
+5