
- •Лекция 3. Операции и операторы.
- •Операции.
- •Классификация операций.
- •Арифметические операции.
- •Логические и битовые операции.
- •Битовые операции сдвига вправо shr и влево shl сдвигают двоичные разряды внутреннего представления
- •Операторы
- •Операторы условного и безусловного перехода.
- •Оператор выбора.
- •Операторы цикла.
- •2. Оператор цикла с предусловием. (для краткости WHILE).
- •Function CountNoNilBit(b : byte) : byte; Var i : byte;
- •Составить функцию подсчета в переменной типа Byte количества младших не нулевых бит до
- •Самостоятельно.
Лекция 3. Операции и операторы.
1.Операции.
2.Операторы.
Операции.
Для вычисления значений переменных в программе на DELPHI используются выражения, состоящие из операндов
и операций.
Например, выражением являются 2 + 2 или a - b. Здесь числа и переменные a, b являются операндами, а знаки +(плюс) или –(минус) представляют собой операции.
Синтаксис выражения: <выражение>== [<операция1>]<операнд1> [[<операция2>]<операнд2>]…; Здесь <операнд>== !<константа>, <имя переменной>, <имя функции>!
Взависимости от количества операндов операции бывают бинарные и унарные. Бинарные операции имеют два операнда, а унарные – один.
Классификация операций.
•арифметические операции == ! + , - , * , / , div , mod !
•логические операции == ! not(унарная) , and , or , xor(унарная)!
•битовые операции (поразрядные логические и сдвига shl, shr)
•операция определения адреса == @<имя> (унарная)
Операции имеют разный приоритет. У логических и битовых операций наивысший приоритет имеет унарная not, следующая по приоритету операция and и операции сдвига shl, shr, а операции or и xor имеют самый низкий приоритет.
Приоритетом операций легко управлять с помощью круглых скобок, например по аналогии с выражением (a+b)*(a-b) можно записать (a or b) and (a or (not b)).
Арифметические операции.
Тип результата в арифметических операциях сложения (+), вычитания (-) и умножения (*) соответствует типу операндов, которые могут быть как целого, так и действительного типа, но если хотя бы один из них действительного типа, то и результат будет действительного типа. Результат операции деления (/) всегда действительного типа.
Для целочисленных переменных имеются две специальные операции:
•целочисленного деления (div), когда результат имеет целый тип, а остаток отбрасывается;
•получения остатка от деления (mod) левого операнда на правый, а частное не определено.
Примеры для a=17, b=3: a div b = 5
a mod b = 2

Логические и битовые операции.
Эти операции очень похожи и имеют одинаковые обозначения за исключением операций сдвига. Разница заключается лишь в том, что операнды логических операций должны
иметь тип Boolean и могут принимать только два значения true (истина) или false (ложь), в то время как для
одноименных битовых операций операнды могут принимать любое значение порядкового типа.
Правила выполнения этих операций одинаковы, если представить себе, что логическая переменная состоит из одного бита и true соответствует значению 1, а false - значение 0.
1 and 1=1 |
1 or 1=1 |
1 xor 1=0 |
not 1=0 |
1 and 0=0 |
1 or 0=1 |
1 xor 0=1 |
not 0=1 |
0 and 1=0 |
0 or 1=1 |
0 xor 1=1 |
- |
0 and 0=0 |
0 or 0=0 |
0 xor 0=0 |
- |
Битовые операции сдвига вправо shr и влево shl сдвигают двоичные разряды внутреннего представления числа, заданного первым операндом на количество позиций, определяемое вторым операндом.
Примеры:
11110000 and 10101100 = 10100000
11110000 or 10101100 = 11111100
11110000 xor 10101100 = 01011100 not 11110000 = 00001111 10101100 shl 3 = 01100000 10101100 shr 2 = 00101011
Операция определения адреса.
Эта операция позволяет найти четырехбайтовую переменную содержимое которой равно ее адресу. Такая переменная может быть преобразована к типу LongWord и выведена на монитор, например, для контроля или отладки.
Операторы
Операторы в отличие от операций, которые не изменяют последовательность выполнения программы, являются как раз средством изменения последовательности
выполняемых команд. По этой причине они еще называются
управляющими структурами языка. К ним относятся операторы:
•ПРИСВАИВАНИЯ
•СОСТАВНОЙ
•УСЛОВНОГО И БЕЗУСЛОВНОГО ПЕРЕХОДА
•ОПЕРАТОР ВЫБОРА
•ОПЕРАТОРЫ ЦИКЛА
ОПЕРАТОР ЦИКЛА С ЗАДАННЫМ ЧИСЛОМ ПОВТОРЕНИЙ (оператор FOR)
ОПЕРАТОРЫ ЦИКЛА С ПРЕДУСЛОВИЕМ И ПОСТУСЛОВИЕМ (операторы WHILE и REPEAT соответственно)
Оператор присваивания. <переменная> := <выражение>;
<переменная> и <выражение> должны иметь одинаковый тип. Допускается случай, когда <переменная> : Real, а <выражение> : !Integer, word, byte!,
но не наоборот!
Если все же надо выполнить такое присваивание, необходимо принудительно округлить выражение функцией round.
<переменная типа Integer>:=round(<выражение типа Real>); Составной оператор.
begin
<несколько операторов> end;
Составной оператор используется, когда надо, чтобы НЕСКОЛЬКО операторов рассматривались как ОДИН оператор.
Операторы условного и безусловного перехода.
Оператор условного перехода имеет две формы полную и сокращенную, когда ветвь else отсутствует.
if <условие> then <опеpатоp1> [else <опеpатоp2>];
<условие> == переменная или выражение логического типа. Оператор безусловного перехода
goto <метка>;
обеспечивает безусловный (принудительный) переход на описанную в разделе Label метку. Его желательно без крайней нужды не использовать.
Оператор выбора.
Является альтернативой оператору условного перехода, но обеспечивает, в отличие от последнего, выбор более чем из двух точек ветвления.
case <выражение> of
<значение выpажения1>: <опеpатоp1>; <значение выpажения2>: <опеpатоp2>;
. . . . . . . . . . . . .
<значение выраженияN>: <опеpатоpN>; [ else
<опеpатоp_else> ] end;
Здесь <выражение> == переменная или выражение порядкового типа.
Выбирается та ветвь, <значение выражения> которой совпадает со значением <выражение>. Если такое значение не найдено, будет выполнена ветвь <опеpатоp_else>.
Обpатите внимание, что END в конце опеpатоpа используется без BEGIN.