Это не совсем фигня. Просто шутка, с прицелом на посвященных.
Я поясню, но придется немного погрузить читателя в двоичный код и применить несколько моделей для обьяснения..
ЛЮБЫЕ обьекты в программе - представление комплекса характеристик в некотором (но всегда в цифровом) виде. То есть у программиста, решающего задачу изменить положение обьекта и забора наиболее эффективный выход - поменять координаты первого и второго. Это разумеется грубо, и для современных игр, к примеру - не подойдет, но уверяю Вас, что если речь идет о вычислительных методах - это один из самых оптимальных вариантов. Да, разумеется не для любой модели и не любого случая.
Итак, меняем местами. Представьте себе, что у вас в руках два арбуза. И вам нужно поменять их местами. Наиболее очевидным является использование какой либо поверхности, чтобы вы ей воспользовались. На языке программирование это будет третья переменная, куда вы сперва скопируете один комплект значений, затем "сменив руки" перекинете арбуз с одной руки на другую, затем возьмете с свободную руку арбуз который где-то лежит. Это простая и логичная схема в жизни. Но мы говорим о переменных, верно ? Есть в булевой алгебре операция "исключающее или", традиционно она зовется "XOR" что она делает - вам охотно пояснит любой справочник, я итак затягиваю пост. Так вот, в отличие от жизни в программировании есть возможность поменять арбузы местами без применения некоей поверхности или лишней переменной. Дальше начнутся двоичные операции: представим себе, что забор и человечек находятся на условных позициях A=1 и B=3. В двоичном коде это будет выглядеть как A=0001 и B=0011. Применяя правило B=A xor B, A=B xor A, A=A xor B мы получим: B= 0001 xor 0011 = 0010, A=0010 xor 0001=0011 (ага ! мы уже переложили B в A) и последняя операция B=0011 xor 0010= 0001. Финита. было A=0001, B=0011, стало А=0011, B=0001. Произведен обмен переменных без использования третьей. Это в коде процессора 8086* _и иже_ занимало шесть байт, что было иногда довольно эффективно. Второй вопрос, что на разных RISC и PIC было более целесообразно сразу копировать А в обе переменных, а уж величину B писать с использованием единственного je/jne оператора в другую переменную. Но это сильно зависит от задачи, от головы программиста и прочей фигни. Которую невозможно передать в тексте. Простите за сложное и нудное обьяснение, но Вы этого просили сами.
Для посвященных: Разумеется push ax/push bx/pop ax/pop bx экономят нам 2 байта. Но тут все же развлекательный сайт, верно ? )
Это сообщение отредактировал Umgah - 12.12.2012 - 20:53