0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Не хватает операнда. Выражения, операнды и операторы. Операции с операндами

Не хватает операнда. Выражения, операнды и операторы. Операции с операндами

Горбачев Л.И. Основы программирования в среде Turbo Pascal.

Выражения, операнды, операции.

Операнд — величина, представляемая собой объект операции, реализуемой ЭВМ в ходе выполнения программы вычислений.

Переменные и константы всех типов используются в выражениях. Выражение задает порядок выполнения действий над элементами данных и состоит из операндов (констант, переменных, обращений к функциям), круглых скобок и знаков операций. Операции определяют действия, которые надо выполнить над операндами. Например, в выражении (X + Y — 10) X, Y и 10 — операнды; «+», «-» — знаки операций сложения и вычитания.

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

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

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

6.1. Арифметические выражения и операции.

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

Арифметическое выражение порождает целое или действительное значение. Наиболее простыми формами арифметических выражений являются: целая или действительная константа без знака; целая или действительная переменная; элемент массива целого или действительного типа; функция, принимающая целое или действительное значение.

Значение переменной или элемента массива должно быть определено до их появления в арифметическом выражении. Другие арифметические выражения составляются из вышеперечисленных простых форм путем применения круглых скобок и арифметических операций.

Арифметические операции выполняют арифметические действия в выражениях над значениями операндов целочисленных и вещественных типов. Арифметические операции языка Паскаль представлены в виде следующей таблицы:

Целочисленное деление (div) отличается от обычной операции деления тем, что возвращает целую часть частного, дробная часть отбрасывается. Перед выполнением операции оба операнда округляются до целых значений. Результат целочисленного деления всегда равен нулю, если делимое меньше делителя.
11 div 5 = 2
10 div 3 = 3
2 div 3 = 0

Деление по модулю (mod) возвращает остаток, полученный при выполнении целочисленного деления, иначе говоря I mod J = I — (I div J) * J. Если J = 0, то возникает ошибка.
11 mod 5 = 1
10 mod 3 = 1
14 mod 5 = 4

Арифметическое «И» (and) производит логическое умножение операндов в соответствии со следующей таблицей истинности:
1 and 1 = 1
1 and 0 = 0
0 and 1 = 0
0 and 0 = 0

Операнды записываются в десятичной форме, но во время выполнения переводятся в двоичную форму. Результат представлен в десятичной форме.Пример:
Вычислить результат выражения A and B, если A = 12 и B = 22.
A и B занимают в памяти 2 байта и в двоичной форме имеют вид: 000000000001100 и 000000000010110. В результате выполнения операции 000000000001100 and 000000000010110 в соответствии с таблицей истинности получим результат 0000000000000100, или 4 в десятичной форме. Следовательно, 12 and 22 = 4.

Сдвиг влево (K shl N) восстанавливает в качестве результата значение, полученное путем сдвига на N позиций влево представленного в двоичной форме числа K.
Пример: Вычислить результат выполнения выражения 2 shl 7.
Число 2 занимает в памяти 2 байта и в двоичной форме имеет вид 000000000000010. Сдвигаем каждый бит на 7 позиций влево, получаем 000000010000000, что соответствует числу 256 в десятичной форме. Следовательно, 2 shl 7 = 256.

Сдвиг вправо (shr) выполняется аналогично, с той лишь разницей, что сдвиг производится вправо.
160 shr 2 = 40
90 shr 2 = 22
256 shr 7 = 2

Логическое сложение (or) выполняет сложение операндов в двоичной форме в соответствии с таблицей истинности:
1 or 1 = 1
1 or 0 = 1
0 or 1 = 1
0 or 0 = 0
Результат представлен в десятичной форме. Пример:
Вычислить результат выполнения выражения 12 or 22.
12 и 22 занимают в памяти по 2 байта и в двоичной форме имеют вид: 000000000001100 и 000000000010110 соответственно. Выполнив сложение в соответствии с таблицей истинности, получим двоичное значение суммы 0000000000011110, что соответствует числу 30 в десятичной форме. Следовательно, 12 or 22 = 30.

Читать еще:  Пловец пересекает реку шириной 240 мм. Задачи. Относительность движения. Примеры решения задач

Исключающее «ИЛИ» (xor) производит сложение операндов в соответствии с таблицей истинности:
1 xor 1 = 0
1 xor 0 = 1
0 xor 1 = 1
0 xor 0 = 0
Результат преобразовывается в десятичную форму.
Пример: Вычислить результат выполнения выражения 12 xor 22. 12 и 22 занимают в памяти 2 байта и в двоичной форме имеют вид: 000000000001100 и 000000000010110 соответственно. Выполнив сложение по таблице истинности, получим двоичное значение суммы: 0000000000011010 или 26 в десятичной форме. Следовательно, 12 xor 22 = 26.

Применение операции not к данным целочисленных типов вызывает побитную инверсию (отрицание) соответствующего данному числу двоичного кода.
not 0 = -1
not 78 = -79
Пример: Вычислить результат выполнения выражения not 78.
Число 78 занимает в памяти 2 байта и в двоичной форме имеет вид: 0000000001001110. При выполнении операции все 0 заменяются на 1, а 1 — на 0 соответственно. После выполнения операции not 78 получим: 1111111110110001, что соответствует числу -79 в десятичной форме.

В любом выражении, если один или более операндов имеют вещественный тип, то результат будет тоже вещественного типа. В операциях div и mod оба операнда должны быть целого типа.

В Турбо Паскале нет операции возведения в степень. При необходимости ее использования применяют стандартные функции:
X^A (x в степени а) = Exp(A * Ln(X));

Однако таким образом нельзя возвести в целую степень отрицательное число (это можно сделать с использованием операторов цикла).

6.2. Выражения и операции отношения.

Выражения отношения определяет истинность или ложность результата. Операции отношения выполняют сравнение двух операндов и определяют, истинно ли значение выражения или ложно. В языке Паскаль операции отношения и булевские операции важны, так как они интенсивно используются для управления циклами и в условных операторах.

Сравниваемые величины могут принадлежать к любому скалярному или перечисляемому типу данных. Результат всегда имеет булевский тип и принимает одно из двух значений: True (истина) или False (ложь).

Электроника для всех

Блог о электронике

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

В языке СИ присваивание также является выражением, и значением такого выражения является величина, которая присваивается.

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

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

Если в качестве операнда используется константа, то ему соответствует значение и тип представляющей его константы. Целая константа может быть типа int, long, unsigned int, unsigned long, в зависимости от ее значения и от формы записи. Символьная константа имеет тип int. Константа с плавающей точкой всегда имеет тип double.

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

Следует помнить, что последним символом строки всегда является нулевой символ, который автоматически добавляется при хранении строки в памяти.

Идентификаторы переменных и функций. Каждый идентификатор имеет тип, который устанавливается при его объявлении. Значение идентификатора зависит от типа следующим образом:

  • идентификаторы объектов целых и плавающих типов представляют значения соответствующего типа;
  • идентификатор объекта типа enum представлен значением одной константы из множества значений констант в перечислении. Значением идентификатора является константное значение. Тип значения есть int, что следует из определения перечисления;
  • идентификатор объекта типа struct или union представляет значение, определенное структурой или объединением;
  • идентификатор, объявляемый как указатель, представляет указатель на значение, заданное в объявлении типа;
  • идентификатор, объявляемый как массив, представляет указатель, значение которого является адресом первого элемента массива. Тип адресуемых указателем величин — это тип элементов массива. Отметим, что адрес массива не может быть изменен во время выполнения программы, хотя значение отдельных элементов может изменяться. Значение указателя, представляемое идентификатором массива, не является переменной и поэтому идентификатор массива не может появляться в левой части оператора присваивания.
  • идентификатор, объявляемый как функция, представляет указатель, значение которого является адресом функции, возвращающей значения определенного типа. Адрес функции не изменяется во время выполнения программы, меняется только возвращаемое значение. Таким образом, идентификаторы функций не могут появляться в левой части операции присваивания.
Читать еще:  Федор емельяненко почему последний император. Свой парень. Последний император ММА Федор Емельяненко. О необычных соперниках

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

выражение-1 ([ список выражений ])

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

Индексное выражение задает элемент массива и имеет вид:

Тип индексного выражения является типом элементов массива, а значение представляет величину, адрес которой вычисляется с помощью значений выражение-1 и выражение-2.

Обычно выражение-1 — это указатель, например, идентификатор массива, а выражение-2 — это целая величина. Однако требуется только, чтобы одно из выражений было указателем, а второе целочисленной величиной. Поэтому выражение-1 может быть целочисленной величиной, а выражение-2 указателем. В любом случае выражение-2 должно быть заключено в квадратные скобки. Хотя индексное выражение обычно используется для ссылок на элементы массива, тем не менее индекс может появляться с любым указателем.

Индексные выражения для ссылки на элементы одномерного массива вычисляются путем сложения целой величины со значениями указателя с последующим применением к результату операции разадресации (*).

Так как одно из выражений, указанных в индексном выражении, является указателем, то при сложении используются правила адресной арифметики, согласно которым целая величина преобразуется к адресному представлению, путем умножения ее на размер типа, адресуемого указателем. Пусть, например, идентификатор arr объявлен как массив элементов типа double.

Таким образом, чтобы получить доступ к i-тому элементу массива arr можно написать аrr[i], что, в силу сказанного выше, эквивалентно i[a]. При этом величина i умножается на размер типа double и представляет собой адрес i-го элемента массива arr от его начала. Затем это значение складывается со значением указателя arr, что в свою очередь дает адрес i-го элемента массива. К полученному адресу применяется операция разадресации, т.е. осуществляется выборка элемента массива arr по сформированному адресу.

Таким образом, результатом индексного выражения arr[i] (или i[arr]) является значение i-го элемента массива.

Выражение с несколькими индексами ссылается на элементы многомерных массивов. Многомерный массив — это массив, элементами которого являются массивы. Например, первым элементом трехмерного массива является массив с двумя измерениями.

Для ссылки на элемент многомерного массива индексное выражение должно иметь несколько индексов заключенных к квадратные скобки:

выражение-1 [ выражение-2 ][ выражение-3 ] …

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

Результат этого выражения есть адресное выражение, с которым складывается выражение-3 и т.д. Операция разадресации осуществляется после вычисления последнего индексного выражения. Отметим, что операция разадресации не применяется, если значение последнего указателя адресует величину типа массива.

Рассмотрим процесс вычисления индексного выражения mass[1][2][2].

  • 1. Вычисляется выражения mass[1]. Ссылка индекс 1 умножается на размер элемента этого массива, элементом же этого массива является двухмерный массив содержащий 5х3 элементов, имеющих тип int. Получаемое значение складывается со значением указателя mass. Результат является указатель на второй двухмерный массив размером (5х3) в трехмерном массиве mass.
  • 2. Второй индекс 2 указывает на размер массива из трех элементов типа int, и складывается с адресом, соответствующим mass [1].
  • 3. Так как каждый элемент трехмерного массива — это величина типа int, то индекс 2 увеличивается на размер типа int перед сложением с адресом mass [1][2].
  • 4. Наконец, выполняется разадресация полученного указателя. Результирующим выражением будет элемент типа int.
Читать еще:  О чем говорят ваши ноги: палец Мортона, характер и генетика. Ли Чен Читаем по ногам. О чем расскажут ваши ступни. Палец Мортона, характер и совместимость в браке

Если было бы указано mass [1][2], то результатом был бы указатель на массив из трех элементов типа int. Соответственно значением индексного выражения mass [1] является указатель на двухмерный массив.

Выражение выбора элемента применяется, если в качестве операнда надо использовать элемент структуры или объединения. Такое выражение имеет значение и тип выбранного элемента. Рассмотрим две формы выражения выбора элемента:

В первой форме выражение представляет величину типа struct или union, а идентификатор — это имя элемента структуры или объединения. Во второй форме выражение должно иметь значение адреса структуры или объединения, а идентификатор — именем выбираемого элемента структуры или объединения.

Обе формы выражения выбора элемента дают одинаковый результат. Действительно, запись, включающая знак операции выбора (->), является сокращенной версией записи с точкой для случая, когда выражению стоящему перед точкой предшествует операция разадресации (*), примененная к указателю, т.е. запись

в случае, если выражение является указателем.

Выражения, операнды и операторы

Как вы уже знаете, исходный код программы на языке высокого уровня — это текст, который состоит из специальных зарезервированных слов, переменных, констант и т.п. Однако, это упрощённое объяснение. Сегодня мы попробуем приблизиться к более правильным формулировкам. Потому что терминология и правильное её понимание — это очень важная часть любой профессии.

Итак, начнём с выражений.

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

Это выражение, которое записывает в переменную х число 100.

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

Операнд — это значение, переменная или выражение, которое расположено слева или справа от оператора. Например

Здесь 1 и 2 — это операнды, а знак ПЛЮС (+) — это оператор.

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

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

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

Основные виды операторов: арифметические, операторы присваивания, сравнения, логические и поразрядные (побитовые).

Также разделяются операторы по количеству операндов:

  • Унарные: когда с оператором используется только один операнд
  • Бинарные: когда с оператором используется два операнда

Попробуйте догадаться, какие из приведённых ниже операторов являются унарными, а какие бинарными:

Если вы думаете, что на этом с операторами всё, то вы заблуждаетесь. Мы ещё долго и нудно будем о них говорить, так как это тема большая и очень важная.

Кроме того, я вас буду иногда путать, называя операторы операциями. В общем то, это достаточно близкие понятия. Разница лишь в том, что оператор — это символ в языке программирования, а операция — это действие, которое выполняется с помощью этого символа. Например,

Оператор + выполняет операцию сложения
Оператор * выполняет операцию умножения

Домашнее задание придумайте сами. У вас пока недостаточно знаний об операторах и выражениях, чтобы грамотно использовать их в своих программах.

Источники:

http://allpasc.narod.ru/pascalbook/glav5.htm
http://easyelectronics.ru/file/yazyk-programmirovaniya-s-spravochnik/131-2
http://info-master.su/programming/kurs/expressions.php

Ссылка на основную публикацию
Статьи c упоминанием слов:
Adblock
detector