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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
qfisher
31 / 31 / 1
Регистрация: 24.05.2012
Сообщений: 156
#1

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

19.06.2012, 17:19. Просмотров 615. Ответов 4
Метки нет (Все метки)

Прочитал статейку,

http://betterexplained.com/articles/swap-two-variables-using-xor/

Что-то не до понял, почему нельзя использовать эту фичу в swap.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.06.2012, 17:19
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Почему не стоит использовать ^(XOR) в swap (C++):

Стоит ли использовать std::atomic? - C++
Доброго времени суток. Есть переменная в "поток 2" (назовем так) const volatile bool *pbCancelled;, являющаяся указателем на флаг ...

Стоит ли использовать сложные конструкции - C++
Добрый вечер, встревожила и заставила задуматься статья https://habrahabr.ru/company/pvs-studio/blog/301736/ Ведь действительно,...

Так в каких случаях стоит использовать наследование? - C++
Здравствуйте, уважаемое сообщество. После прочтения "C++ Coding Standards" by Herb Sutter and Andrei Alexandrescu, возникли некоторые...

Что такое __attribute__((packed)),и когда это стоит использовать? - C++
Читаю чужие исходники,там встречается __attribute__((packed)) и используется в структурах.Я пробовал приписывать это окончание также к...

Стоит ли использовать тернарный оператор, если всегда есть альтернативы в С ? - C++
Мне вот интересно , что скажут люди о Тернарном операторе, которые уже на С++ программируют немало. Насколько он удобен, много ли...

Почему не стоит создавать массив объектов? - C++
Нам преподаватель сказал, что создавать массив объектов лучше не стоит(надо создавать массив указателей на объекты) так как при...

4
soon
2542 / 1307 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
19.06.2012, 17:56 #2
  • Обнулит, если адреса переменных равны
  • Подходит только для тех типов, для которых определен/перегружен xor
0
qfisher
31 / 31 / 1
Регистрация: 24.05.2012
Сообщений: 156
19.06.2012, 18:26  [ТС] #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

или что-то не так?
0
soon
2542 / 1307 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
19.06.2012, 18:33 #4
qfisher, я сказал адреса переменных. Иными словами: если передать в свап одну и ту же переменную. Бывает редко, поэтому я считаю второй ответ приоритетней.
1
qfisher
31 / 31 / 1
Регистрация: 24.05.2012
Сообщений: 156
19.06.2012, 18:45  [ТС] #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;
     }
1
19.06.2012, 18:45
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.06.2012, 18:45
Привет! Вот еще темы с ответами:

Почему не компилируется код в котором описание класса стоит после main - C++
Изучаю с++ по книге за 21 день. Почему когда я пишу так, то не компилируется: #include <iostream> #include <conio.h> #include...

Почему после конструктора первого класса стоит двоеточие и имя переменной, а не инициализация? - C++
#include <iostream> template <typename T> class first { public: T value; first (T n) : value(n) {} virtual...

Почему не получается использовать bitset в VC++? - C++
Никак не получается использовать bitset в VC++6 . Очень надо - двоичный вектор . В стандарте описан bitset , но работать отказывается ....

Почему вы избегаете использовать возможности С++11 ? - C++
всем привет. сабж. я-то, в полную использую. везде где только могу. но частенько вижу вопросы типа: "а без использования С++0х...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru