Операции
При действиях с вещественным типом одним из операндов может быть значение любого целого типа. Результат операций имеет указанный в таблице тип EXTENDED только для установленного в среде Турбо Паскаля режима генерации кода, рассчитанного на арифметический сопроцессор или на его эмуляцию (см. прил.1). Если этот режим не установлен, результат будет иметь значение типа REAL.
Унарная операция @ применяется к операнду любого типа и возвращает результат типа POINTER (см. гл.6), в котором содержится адрес операнда. Пусть, например, задано описание:
type TwoChar = array [1..2] of char; var Int: integer; TwoCharPtr: ATwoChar;
Тогда оператор:
TwoCharPtr: = @Int;
Приведет к тому, что в TwoCharPtr будет храниться адрес целочисленной переменной INT, которая может теперь интерпретироваться как совокупность двух символов. Поэтому возможен, например, такой оператор:
if TwoCharPtr^[1] = 'С' then…
Если операция @ применяется к процедуре, функции или методу в объекте, ее результатом будет адрес точки входа в эту процедуру (функцию, метод). Этот адрес можно использовать только в подпрограмме, написанной на ассемблере, или в фрагментах INLINE.
В Турбо Паскале определены следующие логические операции:
- not – логическое НЕ;
- and – логическое И;
- or – логическое ИЛИ;
- хоr – исключительное ИЛИ.
Логические операции применимы к операндам целого и логического типов. Если операнды – целые числа, то результат логической операции есть тоже целое число, биты которого (двоичные разряды) формируются из битов операндов по правилам, указанным в табл. 3.2.
Таблица 3.2. Логические операции над данными типа INTEGER (поразрядно).
Операнд 1 | Операнд 2 | not | and | or | xor |
---|---|---|---|---|---|
1 | 0 | ||||
0 | 1 | ||||
0 | 0 | 0 | 0 | 0 | |
0 | 1 | 0 | 1 | 1 | |
1 | 0 | 0 | 1 | 1 | |
1 | 1 | 1 | 1 | 0 |
К логическим же в Турбо Паскале обычно относятся и две сдвиговые операции над целыми числами:
- i shl j – сдвиг содержимого i на j разрядов влево; освободившиеся младшие разряды заполняются нулями;
- i shr j – сдвиг содержимого i на j разрядов вправо; освободившиеся старшие разряды заполняются нулями.
В этих операциях i и j – выражения любого целого типа.