Лекция: Преобразования типов

Преобразование типов происходит при присваивании значе­ния переменной одного типа переменной другого типа. Преобра­зование меняет физическое представление значения в памяти данных, но не должно изменять само значение. Если это невоз­можно, то преобразование приводит к частичной потере данных. Но в таком случае транслятор требует явного указания необходи­мости выполнения такой операции.

Рассмотрим сначала работу с целыми числами. Пусть, на­пример, объявлена переменная siVar типа короткое целое (SINT 8 бит) и переменная iVar типа целое (INT 16 бит). Допус­тим siVar = 100, a iVar = 1000. Выражение iVar := siVar являет­ся вполне допустимым, поскольку числа типа SINT являются подмножеством INT (iVar примет значение 100). Здесь преобра­зование типа будет выполнено транслятором автоматически, без каких-либо дополнительных указаний. Обратное присваивание siVar:= iVar приведет к переполнению и потере данных. Заста­вить транслятор выполнить преобразование с вероятной поте­рей данных можно только в явной форме при помощи специа­льного оператора siVar := INT_TO_SINT(iVar). Результат равен 24 (в шестнадцатеричной форме 1000 это 1б#ОЗЕ8 и только младший его байт перейдет в SINT, значение 16#Е8 соответст­вует десятичному числу 24).

Аналогичная ситуация возникает при работе с действительны­ми числами длинного LREAL и короткого REAL типов.

Операторы явного преобразования базовых МЭК-типов образу-к>т свои наименования из двух частей. Вначале указывается «ис­ходный тип», затем «_ТО _» и «тип результата*. Например:

(* Результат 16#АА*) (*120*)

 

i := REAL_TO_INT(2.7); (*Результат 3*)

i := TRUNC(2.7); (*Результат 2*)

t := STRING_TO_TIME('T#216ms'); (*РезультатТ#216ms*)

Операция TRUNC выполняет отбрасывание дробной части в отличие от преобразования REAL__TO_INT, выполняющего округление.

Обратите внимание, что операции преобразования допустимы для любых комбинаций базовых типов, а не только для совмести­мых типов (например, дату в строку). Так, преобразования <...>_TO_STRING фактически заменяют оператор PRINT, распространенный в языках общего применения.

В конкретной реализации отдельные преобразования могут не поддерживаться или иметь определенные особенности, в первую очередь это относится к преобразованиям строк в другие типы и обратно. Поэтому мы не будем здесь приводить подробные описа­ния всех возможных преобразований. При необходимости исполь­зуйте руководство по применению системы программирования или оперативную справку.

еще рефераты
Еще работы по информатике