Re[4]: поменять местами A и B
От: tasman  
Дата: 15.10.04 07:59
Оценка: -1
Здравствуйте, <Аноним>, Вы писали:

LG>>этот метод : при любых ли значениях и типах А и В это будет работать?

[skip]
А>Кстати вариант с xor освобождает от забот с переполнением...

Вариант с xor не будет работать если (A==B) и (A!=0) Тогда после выполнения и в A и в B будут нули
... << RSDN@Home 1.1.4 beta 3 rev. 185>>
Re[5]: поменять местами A и B
От: Кодт Россия  
Дата: 15.10.04 10:52
Оценка:
Здравствуйте, tasman, Вы писали:

T> Вариант с xor не будет работать если (A==B) и (A!=0) Тогда после выполнения и в A и в B будут нули


Откуда такая уверенность?
a=b=x;
a^=b; // a=x^x=0
b^=a; // b=x^0=x
a^=b; // a=0^x=x


Этот алгоритм основан на свойствах любой коммутативной группы, и нулевые элементы здесь не причём.
Перекуём баги на фичи!
Re[6]: поменять местами A и B
От: IO Украина  
Дата: 15.10.04 13:07
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Здравствуйте, tasman, Вы писали:


T>> Вариант с xor не будет работать если (A==B) и (A!=0) Тогда после выполнения и в A и в B будут нули


К>Откуда такая уверенность?

К>
К>a=b=x;
К>a^=b; // a=x^x=0
К>b^=a; // b=x^0=x
К>a^=b; // a=0^x=x
К>


К>Этот алгоритм основан на свойствах любой коммутативной группы, и нулевые элементы здесь не причём.

Воббще xor дает ответ на вопрос "разные ли биты?" в виде бита 1 или 0. С таким же успехом можно использовать ответ на вопрос "одинаковые ли биты?". Напр. в виде логического NOT (инвертирование) на результат XOR.
Re: поменять местами A и B
От: safervas  
Дата: 21.10.04 09:50
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Привет. Что за приколы такие, есть два числа A и B, надо поменять значения А и B местами без использования дополнительной ячейки памяти. Я так полагаю, что это невозможно. Есть какие-нить мнения?


Это уже 40 лет известный прример на "исключающее "или"
a=a^b;
b=b^a;
a=a^b (мог здесь напутать)

или если a и b имеют тип int и их сумма не вылазит за пределы max_int
a=a-b;
b=a+b
a=b-a
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.