Урок 4 – Типы данных и знаки операций

Как мы уже говорили, алфавит языка Pascal состоит из практически всех букв и цифр латинского алфавита, из которых потом сформировались зарезервированные слова, идентификаторы, разделители и т.д. В виде таблицы это выглядит как-то примерно так:

Это таблица дальше будет у нас дополняться.

Но язык программирования нам нужен чтобы работать какими-то данными, и эти данные, пока условно (дальше о типах данных мы поговорим подробнее) делятся на числа и текст.

Зачем на нужно подразделять данные на числа и текст? Для того чтобы мы могли выполнять различные операции. И вот мы столкнулись еще с одной лексемой языка – знаками операции.

Знаки операций эквиваленты математическим знакам операций, таким как +, -, / и т.д. Но также у оператора Pascal есть такие знаки операций, которых нет в математике: Div, Mod и т.д. о которых мы поговорим попозже. Когда мы производим такое вычисление: 2 + 5, то здесь знак + является знаком операции, а числа 2 и 5 являются операндами, и также типами данных число.

Все знаки операций подразделяются на унарные и бинарные. Унарная операция применяется только к одному операнду, например -2, т.е. здесь знак операции – преобразует число 2 в отрицательное число. Также к унарным знакам операций относятся + и not ( том как их применять мы поговорим позже в этой и последующих лекциях).

Бинарная операция применяется к двум операндам, например 2 + 3. Т.е. знак + и – также относятся и к бинарным знакам операций. Теперь давайте подробнее разберем это на практике. Создадим файл с именем “unary_operations” и создадим два раздела: имя программы и раздел операторов.

Теперь добавим оператор вывода.

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

Чтобы указать текст в операторе Write() надо его обернуть в одинарные кавычки, как мы это делали, чтобы написать текст “Привет, мир!”.

Текст может содержать все что угодно: кириллицу, иероглифы и .т.д. А что если мы хотим вывести слово “мир” тоже в одинарных кавычках, вот так:

Если мы напишем так, то при запуске программы выйдет ошибка:

Дело в том что для Pascal текст заканчивается на ‘Привет, ‘, т.е. кавычка открылась, мы написали “Привет, “ и поставили закрывающую кавычку. А текст “мир!” получается для Pascal не обернут в кавычки и он не знает что это такое. После текста “мир!” идут две кавычки, но между ними никакого текста нет. Короче говоря, такой код для языка Pascal непонятен, и если мы хотим указать одинарную кавычку в тексте, нам надо просто надо их указать две подряд. Если две одинарные кавычки идут в тексте подряд, то для Pascal это означает, что вы хотите добавить в тексте одинарную кавычку.

Вывод:

Чтобы указать число кавычки ставить не надо:

Т.е. текст мы пишем в кавычках, числа без кавычек. Теперь поговорим об унарных знаках операций, их всего 3: +, -, not. И они идут перед операндом.

Знак “+” я практически не использую и не вижу большого смысла в нем, так как все числа, что вы указываете являются положительными. Т.е. если мы напишем так:

то получим в окне вывода просто 5:

Кстати, я написал знак операции и операнд слитно, но вы можете указывать сколь угодно пробелов между ними:

Следующий знак операции “-”. Он просто превращает наше положительное число в отрицательное.

Перед числом мы можем указывать сколь угодно унарных знаков операций (главное, что они применяются только к одному операнду), и как мы помним из школьной программы – два минуса дают плюс.

И три минуса, снова минус и т.д.:

Если мы укажем вместе + и – или наоборот, то число все равно останется отрицательным:

А вот с третьим “not” знаком чуть сложнее – это побитовая инверсия. Дело в том что все числа, которые мы указываем для процессора представлены в двоичной системе, например, если значение, которое мы указали имеет такой в двоичной системе: 0011, то применив к нему знак операции not, мы получим такой результат: 1100. Т.е. где был 0 станет 1, а где 1 станет 0 – вот почему это называется побитовой инверсией. А что в результате? В результате применяя знак операции “not” для положительного числа, вы просто получите отрицательное число на одно значение больше. Кстати, между “not” и операндом должен быть хотя бы один пробел:

А почему 5 при знаке операции “not” дает -6.

Дело в том, что для Pascal положительные числа начинаются с 0, а отрицательные с -1:

И когда вы применяете к операнду знак операции not, по сути Pascal просто возвращает эквивалентное отрицательное число, и если посмотреть на рисунок выше, то для 5 это -6.

Если мы применим “not” для -6, то получим эквивалентное ему положительное число 5:

Унарные знаки операций не работают с текстом. Если вы напишите так, то получите ошибку при запуске программы:

На этом с унарными знаками операций всё, переходим к бинарным. Создадим новый файл (мы так просто тренируемся создавать новые файлы) под названием “binary_operations”, напишем необходимые разделы и добавим оператор вывода Write();

Как я уже говорил, у бинарных знаков операции должно быть два операнда, т.е. 2 + 3 соответствует этому правилу, где 2 и 3 это операнды и знак “+” – это знак бинарной операции. Как и у унарных знаков, у бинарных также есть “+” и “-”.

Также есть “*” и “/”:

Думаю эти знаки операций вам знакомы еще со школы. Теперь поговорим об бинарных операциях, которые мы в школе не проходили. И первый такой знак – это div.

Смотрите, при обычной делении 2 на 3 у нас выходил ответ 0.66666667 (т.е. у нас есть целая часть 0 и дробная 66666667), а если мы вместо обычного деления применяем знак “div”, который по сути тоже делит первое число на второе, то в остатке мы получим только целую часть, т.е. 0.

Получается знак операции div (от слова division – “деление”) просто делит одно число на другое и стирает дробную часть при выводе, если оно есть.

Знак операции mod (modulus – “мера”) выводит остаток от деления. Например, мы хотим разделить 11 на 2. Получается мы можем поделить без остатка 10 на 2, и 1 один у нас остается в остатке. Вот эту цифру 1 знак операции mod и выведет.

Если мы поделим число, которое меньше делителя, например 5 разделим на 7, то mod просто выведет первое число.

Далее у нас идут побитовые операции (они работают похоже на not), и первый такой знак операции – это and (в переводе значит “и”. Почему именно такие названия мы с вами поймем на последующих лекциях).

Сразу скажу что с числами мы их будем применять редко, но вы должны знать как они работают, это очень нам поможет в будущем.

Итак, знак операции and сравнивает два числа в двоичном представлении. Например, у нас есть два двоичных числа: 11011 (это 27 в десятичной) и 11110 (это 30). Для удобства, напишем их в столбик:

1 1 0 1 1
1 1 1 1 0

Знак операции and будет сравнивать первую цифру первого числа с первой цифрой второго числа, вторую цифру первого числа со второй второго и т.д. Правила сравнения у него такие:

1 and 1 = 1
1 and 0 = 0
0 and 1 = 0
0 and 0 = 0

В итоге у нас получится такое двоичное число:

1 1 0 1 1
1 1 1 1 0
1 1 0 1 0 (результат сравнения)

Данное число 1 1 0 1 0 соответствует 26 в десятичной системе и именно такой ответ мы и получим:

Следующий знак операции – это or (в переводе “или”). Правила сравнения у него такие:

1 or 1 = 1
1 or 0 = 1
0 or 1 = 1
0 or 0 = 0

И если мы сравним два предыдущих числа с помощью or, то получим такой результат:

1 1 0 1 1
1 1 1 1 0
1 1 1 1 1 (это 31 в десятичной)

У знака операции xor (переводится как “исключающее или”. Повторюсь, почему именно такие названия мы с вами поймем чуть позже). Итак, у xor правила такие:

1 xor 1 = 0
1 xor 0 = 1
0 xor 1 = 1
0 xor 0 = 0

Теперь сравним два предыдущих числа:

1 1 0 1 1
1 1 1 1 0
0 0 1 0 1 (это 5 в десятичной)

Идем дальше, у нас осталось 2 знака – это shl (сдвиг влево) и shr (сдвиг вправо).

Допустим у нас есть число 3 (в двоичной системе его можно представить так 11), и данная запись:

означает сдвинуть число 3 в двоичной системе на 7 старших разрядов (или просто прибавить семь нулей):
было – 1 1
стало – 1 1 0 0 0 0 0 0 0 (это 384 в десятичной).

Знак операции shr работает наоборот, сдвигает на определенное количество разрядов вправо (или просто удаляет цифры справа). Допустим, у нас есть допустим у нас 8 в двоичной системе (1000) и мы пишем так:

Т.е. мы указали что хотим удалить 1 цифру у 1 0 0 0, получится 1 0 0, что соответствует 4 в двоичной системе.

Как и в математике, в Pascal есть приоритет операций, например умножение и деление приоритетней чем сложение и вычитание. Более точно приоритет операций приведен ниже:

  1. Унарные операции: +, -, not
  2. Бинарные операции: *, /, div, mod, and, shl, shr
  3. Бинарные операции: +, -, or, xor

Например, если написать такую операцию:

То сперва выполняется умножение, а затем сложение. А если мы имеем знаки операций, которые имеют одинаковый приоритет:

то она выполняется справа налево.

Также как в математике, в Pascal есть скобки, действия в которых выполняются в первую очередь. Знак скобки в Pascal, как и знак точки, относятся к специальным знакам вне категорий, и скобка также имеет разные задачи. Вы могли заметить, что у оператора Write есть скобки, внутри которых мы можем писать типы данных и проводить операции над ними. А когда мы ставим скобки внутри типов данных и знаков операций, то они определяют приоритет выполнения.

Например, если у нас есть такая запись:

То сперва выполняется сложение, а затем умножение. Все как в математике.

Но все эти знаки операций мы применяли к числам, а какие из них можно применить к тексту?

К тексту можно применить из всех этих знаков операций только +.

Если мы напишем так:

То компилятор просто объединит эти строки в одну:

Чтобы вывод был красивей, можно перед “Как дела?” поставить пробел:

А что если мы сложим текст и число?

Компилятор просто превратит число 7 в текст и снова объединит два текста в один:

А если так:

Т.е. здесь у нас сначала идет текст ‘7’ а затем знак сложения и число 7. Компилятор в данной ситуации также переводит число 7 в текст и соединяет их между собой:

А если так:

По правилам приоритета, сначала выполняется умножение, т.е. 7 умножится на 2, будет 14. А затем идет сложение с текстом, т.е. 14 переведется в текст и соединиться с текстом 7.

Когда происходит сложение с текстом, знак + в этом случае называется операцией конкатенации.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *