Парадигмы программирования. Правило трех стаканов

  Уважаемый читатель, что бы ты сделал, желая обменять содержимое двух емкостей? Ну, для того, например, чтобы заменить водку в бутылке на минералку.
  — Да чё тут думать?! Взял бы еще одну пустую посуду! — нашелся бы ты.
  Молодец! Именно так и поступают программисты:  для обмена значениями двух переменных создают еще одну, — временную — для «перелива». Сразу же после «подлога» ее можно удалить и высвободить сверхбыструю, регистровую память.

  Вот как это делается в Си-шных языках:

     int a=1; //первый стакан
     int b=2; //второй стакан
     int temp; //третий, пустой стакан

  Вариант. 1:
     temp =a; // отправляем содержимое первого стакана в третий
     a=b; // отправляем содержимое второго стакана в первый
     b= temp; // и наконец, содержимое третьего стакана попадает во второй

  Или же вот так:

  Вариант. 2:
     a = a + b - (b = a); //Еще один вариант обмена, но уже без третьего стакана. Результат, правда, не так очевиден, да и все ли компиляторы дадут одинаковый результат?//

  Итого — минимум три инструкции. Во втором случае, хотя и записано все в одну строку, операторы сложения, вычитания и присваивания будут выполняться последовательно слева-направо и по приоритетам.

  А вот что умеет Assembler:

     хchg  ax, bx// обмен содержимого двух регистров, и всего за одну инструкцию!

  Впечатляет? Но на самом деле, хотя в отладчике промежуточных инструкций и не видно, но они (микрокоманды) все же есть, и зашиты они в АЛУ центрального процессора. Вот такие дела — без третьего стакана никак не обойтись!


Рецензии
Тяжёлый случай.
А всё очень даже просто:
надо сообразить на троих,
и всё пойдёт, как по формуле:
A+B+C = истина.
Князь Серебряный, я улыбаюсь.
Всего доброго.

Альбина Кирсанова Закусова   06.03.2022 10:28     Заявить о нарушении
На это произведение написано 18 рецензий, здесь отображается последняя, остальные - в полном списке.