Пятница, 03 Мая 2024, 14.39.18
Приветствую Вас Гость

Всё о Паскале

Меню сайта
реклама
Наш опрос
Оцените мой сайт
Всего ответов: 239
Элементы языка Алфавит Идентификаторы Константы Выражения Операции Структура программы

Операции

В Турбо Паскале определены следующие операции:
      унарные not, @;
      мультипликативные *, /, div, mod, and, shl, shr;
      аддитивные +, -, or, xor;
      отношения =, о, <, >, <=, >=, in.

Приоритет операций убывает в указанном порядке, т. е. наивысшим приоритетом обладают унарные операции, низшим — операции отношения. Порядок выполнения нескольких операций равного приоритета устанавливается компилятором из условия оптимизации кода программы и не обязательно слева направо. При исчислении логических выражений операцииравного приоритета всегда вычисляются слева направо, причем будут вычисляться все или только достаточные операции в зависимости от установленной в среде Турбо Паскаля опции ptions | compiler | complete boolean eval: при установленном значении этой опции вычисляются все операции отношения, при неустановленном — только те, которые достаточны для получения результата. Это обстоятельство необходимо учитывать при использовании операций отношения с функциями, в которых изменяются глобальные переменные илипараметры, передаваемые по имени, например:

Function Addl(var x: Integer): Integer;
begin {Addl}
inc(x);
Addl := x;
end {Addl};
var
a,b : Integer;
begin {main}
if (a > b) or (Addl(a) > 100) then b := a;

При выполнении этого фрагмента значение переменной А будет зависеть от настройки опции: если опция активизирована, значение А всегда наращивается на 1, если не активизирована — только в случае А <= в.

Правила использования операций с операндами различного типа приводятся в таблице

 
 Операция Действие Тип операндов Тип результата
 * Пересечение множеств Множественный Множественный
 / Деление Любой вещественный EXTENDED
 div Целочисленное деление Любой целый Наименьший целый
 mod О статок от деления То же То же
 and Логическое И Логический Логический
 and To же Любой целый Наименьший целый
 shl Левый сдвиг То же То же
 shr Правый сдвиг То же То же
 + Сложение То же То же
 + То же Любой вещественный EXTENDED
 + Объединение множеств Множественный Множественный
 + Сцепление строк Строковый Строковый
 - Вычитание Любой целый Наименьший целый
 - То же Любой вещественный EXTENDED
 or Логическое ИЛИ Логический Логический
 or To же Любой целый Наименьший целый
 = Равно Любой простой или строковый Логический
 <> Не равно То же То же
 < Меньше Логический Логический
 <= Меньше или равно То же То же
 > Больше То же То же
 >= Больше или равно То же То же
При действиях с вещественным типом одним из операндов может быть значение любого целого типа. Результат операций имеет указанный в таблице тип EXTENDED только для установленного в среде Турбо Паскаля режима генерации кода, рассчитанного на арифметический сопроцессор или на его эмуляцию. Если этот режим не установлен, результат будет иметь значение типа REAL.
Унарная операция @ применяется к операнду любого типа и возвращает результат типа POINTER, в котором содержится адрес операнда.

Пусть, например, задано описание
type
      TwoChar = array [1..2] of char;
var
      Int : integer;
      TwoCharPtr : ^4TwoChar;

Тогда оператор

      TwoCharPtr := @Int;

приведет к тому, что в TwoCharPtr будет храниться адрес целочисленной переменной INT, которая может теперь интерпретироваться как совокупность двух символов. Поэтому возможен, например, такой оператор:

      if TwoCharPtrA[l] = 'С' then ...

Если операция @ применяется к процедуре, функции или методу в объекте, ее результатом будет адрес точки входа в эту процедуру (функцию, метод). Этот адрес можно использовать только в подпрограмме, написанной на ассемблере, или в фрагментах, определенных оператором INLINE.
В Турбо Паскале определены следующие логические операции:
      not — логическое НЕ;
      and — логическое И;
      or — логическое ИЛИ;
      хог — исключительное ИЛИ.

Логические операции применимы к операндам целого и логического типов. Если операнды — целые числа, то результат логической операции есть тоже целое число, биты которого (двоичные разряды) формируются из битов опе- рандов по правилам, указанным в таблице:

 
 Логические операции над данными типа 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 shi j — сдвиг содержимого i на j разрядов влево; освободившиеся младшие разряды заполняются нулями;
      i shr j — сдвиг содержимого i на j разрядов вправо; освободившиеся старшие разряды заполняются нулями.
В этих операциях i и j — выражения любого целого типа.
С помощью программы, показанной в следующем примере, можно вывести на экран результат применения логических операций к двум целым числам.

{Программа вводит два целых числа и печатает результат применения к ним логических операций. Для выхода из программы ввести Ctrl-Z и нажать Enter)
  var
        n,m : integer;
  begin
    while not EOF do
      begin
        Write('n,m = ');
        ReadLn(n,m);
        WriteLn(' not= ', not n, ' ', not m);
        WriteLn(' and= ',n and m);
        WriteLn(' or = ',n or m);
        WriteLn(' xor= ',n xor m);
        WriteLn(' shl= ',n shl m);
        WriteLn(' shr= ',n shr m);
  end;
end.

В программе организуется ввод двух произвольных целых чисел и печать результата применения к.ним всех логических операций. Для выхода из программы следует нажать комбинацию клавиш Ctrl+Z, а затем клавишу Enter

. Логические операции над логическими данными дают результат логического типа по правилам, указанным в таблице

 
 Операнд 1 Операнд 2 not and or xor
 True — False — — —
 False — True — — —
 False — False False False False
 False True — False True True
 True False - False True True
 True True — True True False

Операция отношения IN применяется к двум операндам. Первым (левым) операндом должно быть выражение любого порядкового типа, вторым — множество, состоящее из элементов того же типа, или идентификатор мно- жественного типа. Операция дает TRUE, если левый операнд принадлежит множеству, например:
    var
      с: char;
    type
      digit = set of '0'..'9';
    begin
      if с in digit then.......

Форма входа
Календарь новостей
«  Май 2024  »
ПнВтСрЧтПтСбВс
  12345
6789101112
13141516171819
20212223242526
2728293031
Поиск
Друзья сайта
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0