что такое оператор и операнд
Чем операнд отличается от оператора
В мире программирования есть довольно много разных направлений, которые очень сильно отличаются друг от друга. Например, программист микроконтроллеров не сможет разработать конфигурацию 1С, а программист 1С может не иметь понятия о принципах обмена данными через интерфейс RS-232. И при этом оба они могут быть очень классными специалистами в своей области.
Знаете ли вы, чем отличается операнд от оператора? Я вот когда-то не знал и постоянно путался с этими терминами. Для меня, как говорится, был “хрен редьки не слаще”. Но однажды каждый программист при переходе от любителя к профессионалу должен взять себя в руки и разобраться с этими базовыми понятиями. А я постараюсь в этом помочь.
ПРИМЕЧАНИЕ: В видео я кратко рассказал о сдвиге. Если хотите подробнее, то можете посмотреть здесь: сдвиг влево, сдвиг вправо.
Итак, в общих чертах о выражениях, операндах и операторах я рассказал здесь. Повторяться не буду. А в этой статье расскажу только о некоторых особенностях этого вопроса, имеющих отношение к языку Python.
Ну, во первых, в отличие от строго типизированных языков, таких как Паскаль, в Python при составлении выражений типы операндов не обязательно должны совпадать.
А во-вторых, у всех языков программирования практически всегда операторы сложения, вычитания, деления и умножения выглядят одинаково, а вот с остальными могут быть (и есть) отличия.
А вот обещанное отличие операнда от оператора:
Операторы
В Python используются следующие операторы:
Причём, как и в большинстве других языков программирования, их действие может зависеть от типа данных операндов, над которыми выполняется операция.
Например, оператор + складывает два числа. Но он также может быть унарным оператором, и оператором конкатенации (сложения) строк.
Ну а теперь подробнее о назначении приведённых выше операторов. Со строками будем разбираться отдельно, но в случае использования с числовыми типами эти операторы выполняют следующие действия:
x
==
!=
Есть ещё такая штука, как приоритет операторов. Например, в выражении
Например, если вы не знаете, как в Python будет вычислено это выражение:
Есть в Python и другие операторы. А также знаки, похожие на операторы, но не являющиеся таковыми. Но о них мы поговорим в следующих статьях.
Выражения, операнды и операторы
Многие сегодня хотят стать программистами. Хотят. Но ничего не делают для этого. Не делают даже простых вещей. Не хотят даже прочитать книжку из 10 страниц. В итоге так и остаются никем. Потому что мечты не сбываются никогда. Сбываются только планы… Подробнее.
Итак, начнём с выражений.
Это выражение, которое записывает в переменную х число 100.
Когда вы будете создавать выражения, не забывайте, что типы операндов в выражении должны совпадать. Например, такой код
вызовет ошибку во время компиляции, и программа не будет создана. Все похожие типы (например, все целочисленные) можно использовать в качестве операндов. Например, такой код
Не вызовет особых возражений у компилятора, однако это может повлечь за собой неприятности, которые были описаны ранее.
Основные виды операторов: арифметические, операторы присваивания, сравнения, логические и поразрядные (побитовые).
Также разделяются операторы по количеству операндов:
Попробуйте догадаться, какие из приведённых ниже операторов являются унарными, а какие бинарными:
Если вы думаете, что на этом с операторами всё, то вы заблуждаетесь. Мы ещё долго и нудно будем о них говорить, так как это тема большая и очень важная.
Оператор + выполняет операцию сложения
Оператор * выполняет операцию умножения
Домашнее задание придумайте сами. У вас пока недостаточно знаний об операторах и выражениях, чтобы грамотно использовать их в своих программах.
Лекция 2: Переменные, выражения и инструкции (Variables, expressions and statements)
2.4. Операторы
Когда вы вводите инструкцию в интерактивном режиме, интерпретатор выполняет ее и отображает результат.
Скрипт обычно содержит последовательность инструкций. Если инструкций несколько, то результат появляется одновременно с выполнением инструкции.
Например, выполнение скрипта:
приводит к результату
Инструкция присваивания ничего не выводит на экран.
2.5. Операторы и операнды
Операторы (operators) – специальные символы, которые представляют вычисления, наподобие сложения и умножения. Значения, к которым применяется оператор, называются операндами (operands).
Операция деления может привести к неожиданным результатам:
Значение переменной minute равно 59, операция деления 59 на 60 приведет к результату 0.98333, а не к нулю! Причиной подобного результата в Python является округление ( floor division ).
Подробнее об исторических предпосылках округления можно узнать в блоге автора Python :
Если оба операнда целочисленные, то результат тоже будет целочисленным. В нашем примере дробная часть отбрасывается, и в результате получаем нуль.
Если какой-либо из операндов является числом с плавающей точкой, то результат тоже будет типа float :
В новой версии Python 2.0, результат деления целочисленных значений будет числом с плавающей точкой.
2.6. Выражения
Выражение ( expression ) – это комбинация значений, переменных и операторов. Значение (или переменная ) само по себе является выражением, поэтому все следующие выражения являются корректными (предполагается, что переменной x было присвоено значение ):
Если выражения вводятся в интерактивном режиме, то интерпретатор вычисляет (evaluates) их и отображает результат:
2.7. Порядок операций
Если в выражении встречается больше, чем один оператор, то порядок вычислений зависит от правил старшинства (rules of precedence ). Для математических операций, Python следует математическим соглашениям. Аббревиатура PEMDAS является простым способом для запоминания правил:
Скобки (Parentheses) имеют наивысший приоритет и могут использоваться для принудительного определения порядка вычислений в выражении. Таким образом, результат выражения 2*(3-1) будет равен 4, (1+1)**(5-2) будет равен 8. Вы также можете использовать скобки для упрощения чтения выражений, например, (minute*100) / 60, если это не повлияет на результат.
Возведение в степень (Exponentiation) имеет наибольший приоритет, так 2**1+1 равно 3, а не 4, и 3*1**3 равно 3, а не 27.
Умножение и деление (Multiplication and Division) имеют одинаковый приоритет, который выше сложение и вычитания (Addition and Subtraction), которые также имеют одинаковый приоритет. Таким образом, 2*3-1 равно 5, а не 4, и 6+4/2 равно 8, а не 5.
Операторы с одинаковым приоритетом вычисляются слева направо. Таким образом, 5-3-1 равно 1, а не 3.
Если вы сомневаетесь, то поставьте скобки.
2.8. Модульные операторы
Модульные операторы работают с целочисленными значениями и возвращают остаток от деления (yields the remainder ) двух операндов. В Python модульный оператор представлен символом (%). Синтаксис у него следующий:
Модульный оператор может быть очень полезен, если вы хотите проверить делится ли x на y без остатка – если x % y равно 0.
Также, вы можете извлечь самую правую цифру или цифры из числа. Например, x % 10 вернет самую правую цифру числа x ( по основанию 10).
Электроника для всех
Блог о электронике
1.3.1. Операнды и операции
Комбинация знаков операций и операндов, результатом которой является определенное значение, называется выражением. Знаки операций определяют действия, которые должны быть выполнены над операндами. Каждый операнд в выражении может быть выражением. Значение выражения зависит от расположения знаков операций и круглых скобок в выражении, а также от приоритета выполнения операций.
В языке СИ присваивание также является выражением, и значением такого выражения является величина, которая присваивается.
При вычислении выражений тип каждого операнда может быть преобразован к другому типу. Преобразования типов могут быть неявными, при выполнении операций и вызовов функций, или явными, при выполнении операций приведения типов.
Операнд — это константа, литерал, идентификатор, вызов функции, индексное выражение, выражение выбора элемента или более сложное выражение, сформированное комбинацией операндов, знаков операций и круглых скобок. Любой операнд, который имеет константное значение, называется константным выражением. Каждый операнд имеет тип.
Если в качестве операнда используется константа, то ему соответствует значение и тип представляющей его константы. Целая константа может быть типа int, long, unsigned int, unsigned long, в зависимости от ее значения и от формы записи. Символьная константа имеет тип int. Константа с плавающей точкой всегда имеет тип double.
Строковый литерал состоит из последовательности символов, заключенных в кавычки, и представляется в памяти как массив элементов типа char, инициализируемый указанной последовательностью символов. Значением строкового литерала является адрес первого элемента строки и синтаксически строковый литерал является немодифицируемым указателем на тип char. Строковые литералы могут быть использованы в качестве операндов в выражениях, допускающих величины типа указателей. Однако так как строки не являются переменными, их нельзя использовать в левой части операции присваивания.
Следует помнить, что последним символом строки всегда является нулевой символ, который автоматически добавляется при хранении строки в памяти.
Идентификаторы переменных и функций. Каждый идентификатор имеет тип, который устанавливается при его объявлении. Значение идентификатора зависит от типа следующим образом:
Вызов функций состоит из выражения, за которым следует необязательный список выражений в круглых скобках:
выражение-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].
Если было бы указано mass [1][2], то результатом был бы указатель на массив из трех элементов типа int. Соответственно значением индексного выражения mass [1] является указатель на двухмерный массив.
Выражение выбора элемента применяется, если в качестве операнда надо использовать элемент структуры или объединения. Такое выражение имеет значение и тип выбранного элемента. Рассмотрим две формы выражения выбора элемента:
В первой форме выражение представляет величину типа struct или union, а идентификатор — это имя элемента структуры или объединения. Во второй форме выражение должно иметь значение адреса структуры или объединения, а идентификатор — именем выбираемого элемента структуры или объединения.
Обе формы выражения выбора элемента дают одинаковый результат. Действительно, запись, включающая знак операции выбора (->), является сокращенной версией записи с точкой для случая, когда выражению стоящему перед точкой предшествует операция разадресации (*), примененная к указателю, т.е. запись
в случае, если выражение является указателем.
В приведенном примере используется операция выбора (.) для доступа к элементу left структурной переменной elem. Таким образом элементу left структурной переменной elem присваивается адрес самой переменной elem, т.е. переменная elem хранит ссылку на себя саму.
Приведение типов это изменение (преобразование) типа объекта. Для выполнения преобразования необходимо перед объектом записать в скобках нужный тип:
( имя-типа ) операнд.
Приведение типов используются для преобразования объектов одного скалярного типа в другой скалярный тип. Однако выражению с приведением типа не может быть присвоено другое значение.
int i; bouble x; b = (double)i+2.0;
В этом примере целая переменная i с помощью операции приведения типов приводится к плавающему типу, а затем уже участвует в вычислении выражения.
Константное выражение — это выражение, результатом которого является константа. Операндом константного выражения могут быть целые константы, символьные константы, константы с плавающей точкой, константы перечисления, выражения приведения типов, выражения с операцией sizeof и другие константные выражения. Однако на использование знаков операций в константных выражениях налагаются следующие ограничения:
Выражения со знаками операций могут участвовать в выражениях как операнды. Выражения со знаками операций могут быть унарными (с одним операндом), бинарными (с двумя операндами) и тернарными (с тремя операндами).
Унарное выражение состоит из операнда и предшествующего ему знаку унарной операции и имеет следующий формат:
Операции. По количеству операндов, участвующих в операции, операции подразделяются на унарные, бинарные и тернарные.
В языке Си имеются следующие унарные операции:
Унарные операции выполняются справа налево.
Операции увеличения и уменьшения увеличивают или уменьшают значение операнда на единицу и могут быть записаны как справа так и слева от операнда. Если знак операции записан перед операндом (префиксная форма), то изменение операнда происходит до его использования в выражении. Если знак операции записан после операнда (постфиксная форма), то операнд вначале используется в выражении, а затем происходит его изменение.
В отличие от унарных, бинарные операции, список которых приведен в табл.7, выполняются слева направо.
Таблица 7
Знак операции | Операция | Группа операций |
---|---|---|
* | Умножение | Мультипликативные |
/ | Деление | |
% | Остаток от деления | |
+ | Сложение | Аддитивные |
— | Вычитание | |
> | Сдвиг вправо | |
= | Больше или равно | |
== | Равно | |
!= | Не равно | |
& | Поразрядное И | Поразрядные операции |
| | Поразрядное ИЛИ | |
^ | Поразрядное исключающее ИЛИ | |
&& | Логическое И | Логические операции |
|| | Логическое ИЛИ | |
, | Последовательное вычисление | Последовательного вычисления |
= | Присваивание | Операции присваивания |
*= | Умножение с присваиванием | |
/= | Деление с присваиванием | |
%= | Остаток от деления с присваиванием | |
-= | Вычитание с присваиванием | |
+= | Сложение с присваиванием | |
>= | Сдвиг вправо присваиванием | |
&= | Поразрядное И с присваиванием | |
|= | Поразрядное ИЛИ с присваиванием | |
^= | Поразрядное исключающее ИЛИ с присваиванием |
Левый операнд операции присваивания должен быть выражением, ссылающимся на область памяти (но не объектом объявленным с ключевым словом const), такие выражения называются леводопустимыми к ним относятся:
При записи выражений следует помнить, что символы (*), (&), (!), (+) могут\ обозначать унарную или бинарную операцию.
Добавить комментарий Отменить ответ
Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.
Выражения и операторы
Эта глава описывает выражения и операторы языка JavaScript, такие как операторы присваивания, сравнения, арифметические, битовые, логические, строчные, и различные специальные операторы.
Полный и детальный список операторов и выражений также доступен в этом руководстве.
Операторы
В JavaScript есть следующие типы операторов. Данный подраздел описывает каждый тип и содержит информацию об их приоритетах друг над другом.
В свою очередь унарная операция использует один операнд, перед или после оператора:
Операторы присваивания
Существуют также составные операторы присваивания, которые используются для сокращённого представления операций, описанных в следующей таблице:
Деструктуризация
Операторы сравнения
Замечание: (=>) не оператор, а нотация Стрелочных функций.
Арифметические операторы
Арифметические операторы (en-US) используют в качестве своих операндов числа (также литералы или переменные) и в качестве результата возвращают одно числовое значение. Стандартными арифметическими операторами являются сложение (+), вычитание (-), умножение (*), и деление (/). При работе с числами с плавающей точкой эти операторы работают аналогично их работе в большинстве других языках программирования (обратите внимание, что деление на ноль возвращает бесконечность Infinity ). Например:
Кроме того, JavaScript позволяет использовать следующие арифметические операторы, представленные в таблице:
Битовые (поразрядные) операторы
Битовые операторы (en-US) обрабатывают свои операнды как последовательности из 32 бит (нулей и единиц), а не как десятичные, шестнадцатеричные или восьмеричные числа. Например, десятичное число 9 имеет двоичное представление 1001. Битовые операторы выполняют операции над таким двоичным представлением, но результат возвращают как обычное числовое значение JavaScript.
Следующая таблица обобщает битовые операторы JavaScript.
Оператор | Использование | Описание |
---|---|---|
Побитовое И (en-US) | a & b | Возвращает единицу в каждой битовой позиции, для которой соответствующие биты обеих операндов являются единицами. |
Побитовое ИЛИ (en-US) | a | b | Возвращает единицу в каждой битовой позиции, для которой один из соответствующих битов или оба бита операндов являются единицами. |
Исключающее ИЛИ (en-US) | a ^ b | Возвращает единицу в каждой битовой позиции, для которой только один из соответствующих битов операндов является единицей. |
Побитовое НЕ (en-US) | Заменяет биты операнда на противоположные. | |
Сдвиг влево (en-US) | a | Сдвигает a в двоичном представлении на b бит влево, добавляя справа нули. |
Сдвиг вправо с переносом знака (en-US) | a >> b | Сдвигает a в двоичном представлении на b бит вправо, отбрасывая сдвигаемые биты. |
Сдвиг вправо с заполнением нулями (en-US) | a >>> b | Сдвигает a в двоичном представлении на b бит вправо, отбрасывая сдвигаемые биты и добавляя слева нули. |
Битовые логические операторы
Основной смысл работы битовых логических операторов состоит в следующем:
Выражение | Результат | Двоичное описание | |||||
---|---|---|---|---|---|---|---|
15 & 9 | 9 | 1111 & 1001 = 1001 | |||||
15 | 9 | 15 | 1111 | 1001 = 1111 | |||||
15 ^ 9 | 6 | 1111 ^ 1001 = 0110 | |||||
Тип оператора | Операторы |
---|---|
свойство объекта | . [] |
вызов, создание экземпляра объекта | () new |
отрицание, инкремент | ! Более подробная версия данной таблицы, содержащая ссылки и дополнительную информацию по каждому оператору, находится в справочнике JavaScript. ВыраженияВыражением является любой корректный блок кода, который возвращает значение. Концептуально, существуют два типа выражений: те которые присваивают переменной значение, и те, которые вычисляют значение без его присваивания. Код 3 + 4 является примером выражения второго типа. Данное выражение использует оператор «+» для сложения чисел 3 и 4 без присваивания переменной полученного результата 7. Все выражения в JavaScript делятся на следующие категории: Основные выраженияБазовые ключевые слова и основные выражения в JavaScript. Оператор thisИспользуйте ключевое слово this для указания на текущий объект. В общем случае this указывает на вызываемый объект, которому принадлежит данный метод. Используйте this следующим образом: Предположим, функция validate выполняет проверку свойства value некоторого объекта; задан объект, а также верхняя и нижняя граница величины данного свойства: Вы можете вызвать функцию validate для обработчика события onChange для каждого элемента формы, используя this для указания на элемент формы, как это показано в следующем примере: Оператор группировкиУпрощённый синтаксис создания массивов и генераторов[for (x of y) x] Упрощённый синтаксис для массивов. (for (x of y) y) Упрощённый синтаксис для генераторов. Упрощённые синтаксисы существуют во многих языках программирования и позволяют вам быстро собирать новый массив, основанный на существующем. Например: Левосторонние выраженияЗначениям слева назначаются значения справа. Вы можете использовать оператор new для создания экземпляра объекта пользовательского типа или одного из встроенных объектов. Используйте оператор new следующим образом: superКлючевое слово используется, чтобы вызывать функции родительского объекта. Это полезно и с классами для вызова конструктора родителя, например. Оператор расширенияОператор расширения позволяет выражению расширяться в местах с множеством аргументов (для вызовов функций) или множестве элементов (для массивов). Похожим образом оператор работает с вызовами функций:
|