Цитата Сообщение от petera Посмотреть сообщение
Внесу ясность.
Не буду цитировать все посты с #11 по #17, но
Преобразование Float To Int выполняется корректно, по всем правилам компьютерной математики!
И преобразованные значения получаются никакие не UDINT, а именно INT, т.е со знаком!
Если смущают миллиарды после -10.0 -->Float To Int-->4294967286, то 4294967286 (FFFF FFF6) это и есть -10 в дополнительном коде
поясню. Целые числа со знаком(INT) в ЭВМ представлены в дополнительном коде.
Он позволяет заменить операцию вычитания на операцию сложения и сделать операции сложения и вычитания одинаковыми для знаковых и беззнаковых чисел, чем упрощает архитектуру ЭВМ.
В таком же виде -10 представлено и в кодесис http://www.owen.ru/forum/showthread....l=1#post220154, и в панели СП, и т.д.
Таким образом если положить 4294967286 (FFFF FFF6) в сетевую переменную, которую читать из панели, то на дисплее панели одна и та же переменная (FFF6) отобразится как 65526 в формате Unsigned или -10 в формате Dec.

В ПР математические операции ADD, MUL, DIV для чисел в дополнительном коде будут выполнятся правильно по определению. Тут даже никаких лишних макросов не нужно.
Т.е. если -10, а это 4 294 967 286(FFFF FFF6) умножить(MUL) на 1000, то получим результат всего лишь 4 294 957 296 (FFFF D8F0) - не что иное, как -10000 в дополнительном коде.
Фактически для операций ADD, MUL, DIV числа 0 до 2147483647 - положительные, а от 2147483648 до 4294967295 - отрицательные в дополнительном коде
Вот только в самой среде редактирования ОЛ почему то ПРАВИЛЬНЫЕ значения INT отображаются как целые беззнаковые.
Вы же участвовали в обсуждении по этой теме: http://www.owen.ru/forum/showthread....EF%F0%EE%F1%FB
Короче в 2 словах: в ОЛ INT(DINT) это UINT(UDINT)! Это они так решили "перекрестить"!