Учебное пособие по курсу «Нейроинформатика»
Шрифт:
При вычислении числовых выражений действуют следующие правила преобразования типов:
1. Выражения вычисляются слева на право.
2. Если два операнда имеют один тип, то результат имеет тот же тип.
3. Если аргументы имеют разные типы, то выражение имеет старший из двух типов. Список числовых типов по убыванию старшинства: Real, Long, Integer.
4. Результат операции деления действительных чисел (операция «/») всегда имеет тип Real, вне зависимости от типов аргументов.
В отличие от преобразования типов приведение типов позволяет по-разному интерпретировать одну область памяти. Функция приведения типа применима только к переменным или элементам массива (преобразование типов применимо и к выражениям). Рекомендуется использовать приведение типов только для типов, имеющих одинаковую длину. Например, Integer и Color или Real и Long. Список функций приведения типов приведен в табл. 6.
Таблица 6. Функции приведения типов
Название | Тип результата | Описание |
---|---|---|
Treal | Real | Четыре байта, адресуемые приводимой переменной, интерпретируются как действительное число. |
Tinteger | Integer | Два байта, адресуемые приводимой переменной, интерпретируются как целое число. |
Tlong | Long | Четыре
|
TrealArray | RealArray | Область памяти, адресуемая приводимой переменной, интерпретируются как массив действительных чисел. |
TPRealArray | PRealArray | Четыре байта, адресуемые приводимой переменной, интерпретируются как указатель на массив действительных чисел. |
TintegerArray | IntegerArray | Область памяти, адресуемая приводимой переменной, интерпретируются как массив целых чисел. |
TPIntegerArray | PIntegerArray | Четыре байта, адресуемые приводимой переменной, интерпретируются как указатель на массив целых чисел. |
TlongArray | LongArray | Область памяти, адресуемая приводимой переменной, интерпретируются как массив длинных целых. |
TPLongArray | PLongArray | Четыре байта, адресуемые приводимой переменной, интерпретируются как указатель на массив длинных целых. |
Tlogic | Logic | Адресуемый приводимой переменной байт интерпретируются как логическая переменная. |
TlogicArray | LogicArray | Область памяти, адресуемая приводимой переменной, интерпретируются как массив логических переменных. |
TPLogicArray | LogicArray | Четыре байта, адресуемые приводимой переменной, интерпретируются как указатель на массив логических переменных. |
TColor | Color | Два байта, адресуемые приводимой переменной, интерпретируются как переменная типа цвет. |
TFuncType | FuncType | Четыре байта, адресуемые приводимой переменной, интерпретируются как адрес функции. |
TPointer | Pointer | Четыре байта, адресуемые приводимой переменной, интерпретируются как адрес. |
Tstring | String | 256 байт области памяти, адресуемой приводимой переменной, интерпретируются как строка символов. |
TPString | PString | Четыре байта, адресуемые приводимой переменной, интерпретируются как указатель на строку символов. |
Tvisual | Visual | Четыре байта, адресуемые приводимой переменной, интерпретируются как отображаемый элемент. |
Следующие примеры иллюстрируют использование преобразования и приведения типов:
При вычислении следующих четырех выражений, получаются различные результаты
Поскольку константа 4096 имеет тип Integer, а 4096 * 4096 = 16777216 = 256 * 65536, то есть младшие два байта результата равны нулю.
Поскольку оба сомножителя имеет тип Integer, то и выражение имеет тип Integer. Следовательно, результат умножения равен нулю, который затем преобразуется к типу Long.
Поскольку первый сомножитель имеет тип длинное целое, то и выражение имеет тип длинное целое.
Поскольку первый сомножитель имеет тип Real, то и выражение имеет тип Real. Из-за недостатка точности произошла потеря точности в седьмом знаке.
В следующем примере, используя приведение типов, в массив действительных чисел A размером в 66 элементов складываются: действительное число в первый элемент массива; длинное целое во второй элемент массива и символьную строку в элементы с 3 по 66.
Необходимо отметить, что элементы массива A, начиная со второго, после выполнения приведенного выше фрагмента программы не рекомендуется использовать как действительные числа, поскольку элемент A[2] содержит значение 2.350988Е-38, а элемент A[5] — значение –4.577438Е-18. Значение элементов, начиная с A[8] (символьная строка ‘Пример приведения типов’ содержит 23 символа и занимает 24 байта, то есть шесть элементов массива) вообще не зависят от приведенного фрагмента программы и содержат «мусор», который там находился ранее.
В списке типов определены только одномерные массивы. Однако, при необходимости, возможно использование двумерных массивов. Для этого в одномерный массив A необходимо поместить указатели на одномерные массивы. При этом I,J-й элемент двумерного массива записывается в виде:
В этом примере использована функция приведения типов TPRealArray, указывающая, что I-й элемент массива A нужно интерпретировать как указатель на одномерный массив действительных чисел, и операция «^» указывающая, что вместо указателя на массив TPRealArray(A[I]) используется массив, на который он указывает.
Таким образом, использование функций приведения типов позволяет из одномерных массивов строить структуры произвольной сложности. В языках программирования, таких как C и Паскаль, существует возможность строить пользовательские типы данных. При разработке стандарта эти возможности были исключены, поскольку использование пользовательских типов, облегчая написание программ, сильно затрудняет разработку компилятора или интерпретатора, а при использовании этого языка для описания компонентов нейрокомпьютера необходимость в пользовательских типах данных возникает чрезвычайно редко. Например, при описании примеров всех компонентов, приведенных в данной работе, такая необходимость ни разу не возникла.
Операции
В данном разделе приведены все операции, которые могут быть использованы при построении выражений различного типа. В табл. 7 приведены операции, которые допустимы в целочисленных выражениях (выражениях типа Integer или Long). В табл. 8 — список, дополняющий список операций из табл. 7 до полного списка операций, допустимых в выражениях действительного типа. В табл. 9 — операции, допустимые при построении логических выражений. В табл. 10 — для выражений типа символьная строка. В табл. 3 — для выражений типа Color. Если операндом может быть любой числовой тип, то вместо перечисления всех числовых типов (Integer, Real, Long) указывается слово «числовой»
Таблица 7.
Приоритет | Обозначение | Тип 1-го операнда | Тип 2-го операнда | Тип результата | Название операции |
---|---|---|---|---|---|
1 | * | Integer | Integer | Integer | Умножение |
1 | * | Long | Integer | Long | Умножение |
1 | * | Integer | Long | Long | Умножение |
1 | * | Long | Long | Long | Умножение |
1 | Div | Integer | Integer | Integer | Целочисленное деление |
1 | Div | Integer | Long | Long | Целочисленное деление |
1 | Div | Long | Integer | Long | Целочисленное деление |
1 | Div | Long | Long | Long | Целочисленное деление |
1 | Mod | Integer | Integer | Integer | Остаток от деления |
1 | Mod | Long | Integer | Long | Остаток от деления |
1 | Mod | Integer | Long | Long | Остаток от деления |
1 | Mod | Long | Long | Long | Остаток от деления |
2 | + | Integer | Integer | Integer | Сложение |
2 | + | Integer | Long | Long | Сложение |
2 | + | Long | Integer | Long | Сложение |
2 | + | Long | Long | Long | Сложение |
2 | – | Integer | Integer | Integer | Вычитание |
2 | – | Integer | Long | Long | Вычитание |
2 | – | Long | Integer | Long | Вычитание |
2 | – | Integer | Long | Long | Вычитание |
2 | – | Long | Integer | Long | Вычитание |
2 | – | Long | Long | Long | Вычитание |
3 | And | Integer | Integer | Integer | Побитное И |
3 | And | Long | Long | Long | Побитное И |
3 | Or | Integer | Integer | Integer | Побитное включающее ИЛИ |
3 | Or | Long | Long | Long | Побитное включающее ИЛИ |
3 | Xor | Integer | Integer | Integer | Побитное исключающее ИЛИ |
3 | Xor | Long | Long | Long | Побитное исключающее ИЛИ |
3 | Not | Integer | Integer | Integer | Побитное отрицание |
3 | Not | Long | Long | Long | Побитное отрицание |
Таблица 8. Операции, дополняющие список операций из табл. 7 до полного списка операций, допустимых в выражениях действительного типа.
Приоритет | Обозначение | Тип 1-го операнда | Тип 2-го операнда | Тип результата | Название операции |
---|---|---|---|---|---|
1 | * | Real | числовой | Real | Умножение |
1 | / | числовой | числовой | Real | Деление |
1 | RMod | числовой | числовой | Real | Остаток от деления |
2 | + | Real | числовой | Real | Сложение |
2 | – | Real | числовой | Real | Вычитание |