По просьбе наших посетителей, данный материал перенесен с сайта plc4good.org.ua, в связи с полной его потерей. Всё возражения принимаются через форму обратной связи.
plc4good.org.ua/view_post.php?id=54
Разбирая один S7 проект, наткнулся на участок кода, который, несомненно, является, веселым приветом писавшего его программиста, тем, кто будет этот код разбирать. 🙂
Если вы знакомы с программированием в STL, можете оценить юмор писавшего.
В адресах MD10 и MD20 в программе хранятся числа в формате REAL, хотя данный код будет работать с любым форматом.
После выполнения кода, значение в адресах не меняются, то есть, мне кажется, что кроме как вогнать в ступор, другого назначения нет…
L MD 10
L MD 14
XOD
TAK
XOD
TAK
XOD
T MD 10
TAK
T MD 14
Нашел, как это работает на Википедии – ru.wikipedia.org/wiki/Алгоритм_обмена_при_помощи_исключающего_ИЛИ
В программировании, обмен при помощи исключающего ИЛИ (англ. Xor swap algorithm, кзор-своп алгоритм) — это алгоритм, который использует операцию исключающего ИЛИ (XOR) для обмена различных значений переменных, имеющих один и тот же тип данных без использования временной переменной. Этот алгоритм работает при помощи свойства симметричного различия, которым обладает XOR: A XOR A = 0 для всех A
Вот еще один пример, подсказанный dan:
таким хитрым способом, зная об операторе ABS, но значения этому не придавая :), можно избавиться от отрицательного знака числа.
L MD 10
SQR
SQRT
T MD 20
Если вы встречали подобные перлы, пишите в коменты. Думаю, что будет интересно всем.
Комментарии к материалу
Добавлен: Вадим Дата: 2009-07-24
Возводим в квадрат
и из полученного берем квадратный корень
Добавлен: komatic Дата: 2009-08-02
>,Возводим в квадрат и из полученого берем квадратный корень
Тоже вариант неплохой, если кинете код в коммент – вставлю в материал…
Добавлен: dan Дата: 2009-08-03
L MD 10
SQR
SQRT
T MD 20
Добавлен: komatic Дата: 2009-08-03
2 dan
спасибо за пример
Оцените статью!