Форум программистов, компьютерный форум CyberForum.ru

Почему не стоит использовать ^(XOR) в swap - C++

Восстановить пароль Регистрация
 
qfisher
30 / 30 / 1
Регистрация: 24.05.2012
Сообщений: 156
19.06.2012, 17:19     Почему не стоит использовать ^(XOR) в swap #1
Прочитал статейку,

http://betterexplained.com/articles/...les-using-xor/

Что-то не до понял, почему нельзя использовать эту фичу в swap.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
19.06.2012, 17:56     Почему не стоит использовать ^(XOR) в swap #2
  • Обнулит, если адреса переменных равны
  • Подходит только для тех типов, для которых определен/перегружен xor
qfisher
30 / 30 / 1
Регистрация: 24.05.2012
Сообщений: 156
19.06.2012, 18:26  [ТС]     Почему не стоит использовать ^(XOR) в swap #3
Цитата Сообщение от soon Посмотреть сообщение
Обнулит, если адреса переменных равны
ну обнулит, а потом восстановит

например

x = 0x00001456
y = 0x00001456

Значит обработка такая

x = x xor y
x = 0, y=0x00001456

y = x xor y
x = 0, y=0x00001456

x = x xor y
x=0x00001456, y=0x00001456

или что-то не так?
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
19.06.2012, 18:33     Почему не стоит использовать ^(XOR) в swap #4
qfisher, я сказал адреса переменных. Иными словами: если передать в свап одну и ту же переменную. Бывает редко, поэтому я считаю второй ответ приоритетней.
qfisher
30 / 30 / 1
Регистрация: 24.05.2012
Сообщений: 156
19.06.2012, 18:45  [ТС]     Почему не стоит использовать ^(XOR) в swap #5
усе, понял, спасибо.

вот, если кому нужно еще по теме
http://ru.wikipedia.org/wiki/%D0%90%...%D0%9B%D0%98#C

C++
1
2
3
4
5
6
7
8
void xorSwap(int &x, int &y)
     {
          if (&x == &y) 
             return;
          x ^= y;
          y ^= x;
          x ^= y;
     }
Yandex
Объявления
19.06.2012, 18:45     Почему не стоит использовать ^(XOR) в swap
Ответ Создать тему
Опции темы

Текущее время: 17:59. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru