Базовые операторы, математика
Многие операторы знакомы нам ещё со школы: сложение + , умножение * , вычитание — и так далее.
В этой главе мы начнём с простых операторов, а потом сконцентрируемся на специфических для JavaScript аспектах, которые не проходят в школьном курсе арифметики.
Термины: «унарный», «бинарный», «операнд»
Прежде, чем мы двинемся дальше, давайте разберёмся с терминологией.
Операнд – то, к чему применяется оператор. Например, в умножении 5 * 2 есть два операнда: левый операнд равен 5 , а правый операнд равен 2 . Иногда их называют «аргументами» вместо «операндов».
Унарным называется оператор, который применяется к одному операнду. Например, оператор унарный минус "-" меняет знак числа на противоположный:
Бинарным называется оператор, который применяется к двум операндам. Тот же минус существует и в бинарной форме:
Формально, в последних примерах мы говорим о двух разных операторах, использующих один символ: оператор отрицания (унарный оператор, который обращает знак) и оператор вычитания (бинарный оператор, который вычитает одно число из другого).
Математика
Поддерживаются следующие математические операторы:
- Сложение + ,
- Вычитание — ,
- Умножение * ,
- Деление / ,
- Взятие остатка от деления % ,
- Возведение в степень ** .
Первые четыре оператора очевидны, а про % и ** стоит сказать несколько слов.
Взятие остатка %
Оператор взятия остатка % , несмотря на обозначение, никакого отношения к процентам не имеет.
Результат a % b – это остаток от целочисленного деления a на b .
Возведение в степень **
В выражении a ** b оператор возведения в степень умножает a на само себя b раз.
Математически, оператор работает и для нецелых чисел. Например, квадратный корень является возведением в степень 1/2 :
Сложение строк при помощи бинарного +
Давайте рассмотрим специальные возможности операторов JavaScript, которые выходят за рамки школьной арифметики.
Обычно при помощи плюса ‘+’ складывают числа.
Но если бинарный оператор ‘+’ применить к строкам, то он их объединяет в одну:
Обратите внимание, если хотя бы один операнд является строкой, то второй будет также преобразован в строку.
Как видите, не важно, первый или второй операнд является строкой.
Вот пример посложнее:
Здесь операторы работают один за другим. Первый + складывает два числа и возвращает 4 , затем следующий + объединяет результат со строкой, производя действие 4 + ‘1’ = 41 .
Сложение и преобразование строк — это особенность бинарного плюса + . Другие арифметические операторы работают только с числами и всегда преобразуют операнды в числа.
Например, вычитание и деление:
Приведение к числу, унарный +
Плюс + существует в двух формах: бинарной, которую мы использовали выше, и унарной.
Унарный, то есть применённый к одному значению, плюс + ничего не делает с числами. Но если операнд не число, унарный плюс преобразует его в число.
На самом деле это то же самое, что и Number(. ) , только короче.
Необходимость преобразовывать строки в числа возникает очень часто. Например, обычно значения полей HTML-формы — это строки. А что, если их нужно, к примеру, сложить?
Бинарный плюс сложит их как строки:
Поэтому используем унарный плюс, чтобы преобразовать к числу:
С точки зрения математика, такое изобилие плюсов выглядит странным. Но с точки зрения программиста тут нет ничего особенного: сначала выполнятся унарные плюсы, которые приведут строки к числам, а затем бинарный ‘+’ их сложит.
Почему унарные плюсы выполнились до бинарного сложения? Как мы сейчас увидим, дело в их приоритете.
Приоритет операторов
В том случае, если в выражении есть несколько операторов – порядок их выполнения определяется приоритетом, или, другими словами, существует определённый порядок выполнения операторов.
Из школы мы знаем, что умножение в выражении 1 + 2 * 2 выполнится раньше сложения. Это как раз и есть «приоритет». Говорят, что умножение имеет более высокий приоритет, чем сложение.
Скобки важнее, чем приоритет, так что, если мы не удовлетворены порядком по умолчанию, мы можем использовать их, чтобы изменить приоритет. Например, написать (1 + 2) * 2 .
В JavaScript много операторов. Каждый оператор имеет соответствующий номер приоритета. Тот, у кого это число больше, – выполнится раньше. Если приоритет одинаковый, то порядок выполнения – слева направо.
Отрывок из таблицы приоритетов (нет необходимости всё запоминать, обратите внимание, что приоритет унарных операторов выше, чем соответствующих бинарных):
| Приоритет | Название | Обозначение |
|---|---|---|
| … | … | … |
| 15 | унарный плюс | + |
| 15 | унарный минус | — |
| 14 | возведение в степень | ** |
| 13 | умножение | * |
| 13 | деление | / |
| 12 | сложение | + |
| 12 | вычитание | — |
| … | … | … |
| 2 | присваивание | = |
| … | … | … |
Так как «унарный плюс» имеет приоритет 15 , который выше, чем 12 у «сложения» (бинарный плюс), то в выражении "+apples + +oranges" сначала выполнятся унарные плюсы, а затем сложение.
Присваивание
Давайте отметим, что в таблице приоритетов также есть оператор присваивания = . У него один из самых низких приоритетов: 2 .
Именно поэтому, когда переменной что-либо присваивают, например, x = 2 * 2 + 1 , то сначала выполнится арифметика, а уже затем произойдёт присваивание = с сохранением результата в x .
Присваивание = возвращает значение
Тот факт, что = является оператором, а не «магической» конструкцией языка, имеет интересные последствия.
Большинство операторов в JavaScript возвращают значение. Для некоторых это очевидно, например сложение + или умножение * . Но и оператор присваивания не является исключением.
Вызов x = value записывает value в x и возвращает его.
Благодаря этому присваивание можно использовать как часть более сложного выражения:
В примере выше результатом (a = b + 1) будет значение, которое присваивается переменной a (то есть 3 ). Потом оно используется для дальнейших вычислений.
Забавное применение присваивания, не так ли? Нам нужно понимать, как это работает, потому что иногда это можно увидеть в JavaScript-библиотеках.
Однако писать самим в таком стиле не рекомендуется. Такие трюки не сделают ваш код более понятным или читабельным.
Присваивание по цепочке
Рассмотрим ещё одну интересную возможность: цепочку присваиваний.
Такое присваивание работает справа налево. Сначала вычисляется самое правое выражение 2 + 2 , и затем результат присваивается переменным слева: c , b и a . В конце у всех переменных будет одно значение.
Опять-таки, чтобы код читался легче, лучше разделять подобные конструкции на несколько строчек:
Польза от такого стиля особенно ощущается при быстром просмотре кода.
Сокращённая арифметика с присваиванием
Часто нужно применить оператор к переменной и сохранить результат в ней же.
Операторы в Java — шпаргалка с примерами
В этой статье вы узнаете о различных типах операторов Java и их синтаксисе.
Операторы это специальные символы, которые осуществляют операции над операндами ( переменными и значениями ). Например, « + » это оператор, который производит сложение.
Сейчас вы узнаете, как использовать операторы, чтобы манипулировать переменными.
Операторы присваивания
Используются в Java , чтобы присвоить значения переменным. Например,
Оператор « = » присваивает значение справа от себя переменной, находящейся слева. В примере переменной age присвоено значение 5 .
Пример 1: оператор присваивания
Когда вы запустите программу, на экран выведется:
Арифметические операторы
Арифметические операторы Java используются, чтобы производить математические операции сложения, вычитания умножения и так далее.
| Оператор | Значение |
|---|---|
| + | Сложение (также используется для конкатенации строк) |
| — | Вычитание |
| * | Умножение |
| / | Деление |
| % | Остаток от деления |
Пример 2: Арифметические операторы
В примере с оператором деления Java , приведенном выше, использованные операнды – переменные. Кроме этого могут использоваться символьные значения. Например:
Оператор « + » также может быть использован, чтобы соединить ( конкатенировать ) две строки или больше.
Пример 3: Арифметический оператор
Когда вы запустите программу, на экран выведется:
Унарные операторы
Унарный оператор Java производит операцию только над одним операндом.
| Оператор | Значение |
| + | Унарный плюс (не нужен, так как числа положительные и без него). |
| — | Унарный минус; инвертирует знак выражения. |
| ++ | Оператор инкремента; увеличивает значение на 1. |
| — | Оператор декремента; уменьшает значение на 1. |
| ! | Оператор логического отрицания; инвертирует значение булевой переменной. |
Пример 4: Унарный оператор
В Java можно использовать операторы « ++ » и « — » в качестве префикса и постфикса. Оператор « ++ » увеличивает значение на 1 , а « — » уменьшает значение на 1 .
Есть большая разница в использовании операторов Java инкремента и декремента в префиксе и в постфиксе. Рассмотрим следующий пример.
Пример 5: Унарный оператор
Когда вы запустите программу, на экран выведется:
Когда выполняется выражение System.out.println(number++) , первым вычисляется изначальное значение. Переменная number увеличивается только после этого. Поэтому вы получите на выходе 5.2 . Далее, когда выполняется System.out.println(number) , показывается значение 6.2 .
Тем не менее, когда выполняется System.out.println(++number) , number увеличивается на 1 перед тем, как будет выведено на экран. Так же обстоят дела и с оператором Java декремента.
Операторы равенства и отношений
Операторы равенства и отношений проверяют, является ли операнд больше, меньше, равен, неравен второму и так далее. Получаемый результат равен true или false .
| Оператор | Описание | Пример |
| == | равен | 5 == 3 результат false |
| != | неравен | 5 != 3 результат true |
| > | Больше | 5 > 3 результат true |
| < | меньше | 5 < 3 результат false |
| >= | Больше или равен | 5 >= 5 результат true |
| <= | Меньше или равен | 5 <= 5 результат true |
Рассмотрим следующий простой пример.
Пример 6: Операторы равенства и отношений
Когда вы запустите программу, в которой используются операторы сравнения Java , на экран выведется:
Здесь мы использовали оператор « > », чтобы проверить, больше ли number1 , чем number2 .
Так как number2 больше, чем number1 , результатом выражения number1 > number2 будет false .
Кроме операторов отношений, есть оператор сравнения типов instanceof , который сравнивает объект и определенный тип.
Оператор instanceof
Пример оператора instanceof .
Когда вы запустите программу, на экран выведется true . Это происходит от того, что test — экземпляр класса String .
Логические операторы Java
Логические операторы Java || ( условное-ИЛИ (OR) ) и && ( условное-И (AND) ) совершают операции над булевыми выражениями. Вот как они работают.
| Оператор | Описание | Пример |
| || | условное-ИЛИ; true если хотя бы одно из булевых выражений истинно (true) | false || true результат — true |
| && | условное-И; истинно если все булевы выражения истинны (true). | false && true результат — false |
Пример 8: Логические операторы Java
Когда вы запустите программу, на экран выведется:
Тернарный оператор
Условный оператор или тернарный оператор Java « ? :» — это сокращение выражения if-then-else . Синтаксис условного оператора:
Вот как это работает.
- Если значение выражения — true , expression1 присваивается переменной ;
- Если значение выражения — false , expression2 присваивается переменной .
Пример 9: Тернарный оператор
Когда вы запустите этот тернарный оператор Java пример, на экран выведется:
Побитовые операторы Java и смещение битов
Чтобы осуществлять побитовые операции Java предоставляет следующие операторы.
Эти операторы применяются нечасто.
Другие операторы присваивания
В начале статьи мы рассмотрели только один оператор присваивания = . Существует еще несколько операторов Java присваивания.
| Оператор | Пример | Эквивалент |
| += | x += 5 | x = x + 5 |
| -= | x -= 5 | x = x – 5 |
| *= | x *= 5 | x = x * 5 |
| /= | x /= 5 | x = x / 5 |
| %= | x %= 5 | x = x / 5 |
| <<= | x <<= 5 | x = x << 5 |
| >>= | x >>= 5 | x = x >> 5 |
| &= | x &= 5 | x = x & 5 |
| ^= | x ^= 5 | x = x ^ 5 |
| |= | x |= 5 | x = x | 5 |
Пожалуйста, опубликуйте свои мнения по текущей теме материала. Мы крайне благодарны вам за ваши комментарии, дизлайки, отклики, лайки, подписки!
Пожалуйста, опубликуйте ваши отзывы по текущей теме статьи. За комментарии, подписки, дизлайки, лайки, отклики низкий вам поклон!
Что такое унарный минус
- Open with Desktop
- View raw
- Copy raw contents Copy raw contents
Copy raw contents
Copy raw contents
Для работы с переменными, со значениями, JavaScript поддерживает все стандартные операторы, большинство которых есть и в других языках программирования.
Несколько операторов мы знаем со школы — это обычные сложение + , умножение * , вычитание и так далее.
В этой главе мы сконцентрируемся на операторах, которые в курсе математики не проходят, и на их особенностях в JavaScript.
Термины: «унарный», «бинарный», «операнд»
У операторов есть своя терминология, которая используется во всех языках программирования.
Прежде, чем мы двинемся дальше — несколько терминов, чтобы понимать, о чём речь.
Операнд — то, к чему применяется оператор. Например: 5 * 2 — оператор умножения с левым и правым операндами. Другое название: «аргумент оператора».
Унарным называется оператор, который применяется к одному операнду. Например, оператор унарный минус «-» меняет знак числа на противоположный:
Бинарным называется оператор, который применяется к двум операндам. Тот же минус существует и в бинарной форме:
Сложение строк, бинарный +
Обычно при помощи плюса ‘+’ складывают числа.
Но если бинарный оператор ‘+’ применить к строкам, то он их объединяет в одну:
Иначе говорят, что «плюс производит конкатенацию (сложение) строк».
Если хотя бы один аргумент является строкой, то второй будет также преобразован к строке!
Причем не важно, справа или слева находится операнд-строка, в любом случае нестроковый аргумент будет преобразован. Например:
Это приведение к строке — особенность исключительно бинарного оператора «+» .
Остальные арифметические операторы работают только с числами и всегда приводят аргументы к числу.
Преобразование к числу, унарный плюс +
Унарный, то есть применённый к одному значению, плюс ничего не делает с числами:
Как видно, плюс ничего не изменил в выражениях. Результат — такой же, как и без него.
Тем не менее, он широко применяется, так как его «побочный эффект» — преобразование значения в число.
Например, когда мы получаем значения из HTML-полей или от пользователя, то они обычно в форме строк.
А что, если их нужно, к примеру, сложить? Бинарный плюс сложит их как строки:
Поэтому используем унарный плюс, чтобы преобразовать к числу:
С точки зрения математики такое изобилие плюсов может показаться странным. С точки зрения программирования — никаких разночтений: сначала выполнятся унарные плюсы, приведут строки к числам, а затем — бинарный ‘+’ их сложит.
Почему унарные плюсы выполнились до бинарного сложения? Как мы сейчас увидим, дело в их приоритете.
В том случае, если в выражении есть несколько операторов — порядок их выполнения определяется приоритетом.
Из школы мы знаем, что умножение в выражении 2 * 2 + 1 выполнится раньше сложения, т.к. его приоритет выше, а скобки явно задают порядок выполнения. Но в JavaScript — гораздо больше операторов, поэтому существует целая таблица приоритетов.
Она содержит как уже пройденные операторы, так и те, которые мы еще не проходили. В ней каждому оператору задан числовой приоритет. Тот, у кого число больше — выполнится раньше. Если приоритет одинаковый, то порядок выполнения — слева направо.
Отрывок из таблицы:
| Приоритет | Название | Обозначение |
|---|---|---|
| . | . | . |
| 15 | унарный плюс | + |
| 15 | унарный минус | — |
| 14 | умножение | * |
| 14 | деление | / |
| 13 | сложение | + |
| 13 | вычитание | — |
| . | . | . |
| 3 | присваивание | = |
| . | . | . |
Так как «унарный плюс» имеет приоритет 15 , выше, чем 13 у обычного «сложения», то в выражении +apples + +oranges сначала сработали плюсы у apples и oranges , а затем уже обычное сложение.
Обратим внимание, в таблице приоритетов также есть оператор присваивания = .
У него — один из самых низких приоритетов: 3 .
Именно поэтому, когда переменную чему-либо присваивают, например, x = 2 * 2 + 1 сначала выполнится арифметика, а уже затем — произойдёт присваивание = .
Возможно присваивание по цепочке:
Такое присваивание работает справа-налево, то есть сначала вычислятся самое правое выражение 2+2 , присвоится в c , затем выполнится b = c и, наконец, a = b .
««smart header =\» возвращает значение» Все операторы возвращают значение. Вызов `x = выражение` не является исключением.
Он записывает выражение в x , а затем возвращает его. Благодаря этому присваивание можно использовать как часть более сложного выражения:
В примере выше результатом (a = b + 1) является значение, которое записывается в a (т.е. 3 ). Оно используется для вычисления c .
Забавное применение присваивания, не так ли?
Знать, как это работает — стоит обязательно, а вот писать самому — только если вы уверены, что это сделает код более читаемым и понятным.
Побитовые операторы рассматривают аргументы как 32-разрядные целые числа и работают на уровне их внутреннего двоичного представления.
Эти операторы не являются чем-то специфичным для JavaScript, они поддерживаются в большинстве языков программирования.
Поддерживаются следующие побитовые операторы:
- AND(и) ( & )
- OR(или) ( | )
- XOR(побитовое исключающее или) ( ^ )
- NOT(не) (
Они используются редко, поэтому вынесены в отдельную главу info:bitwise-operators.
Сокращённая арифметика с присваиванием
Часто нужно применить оператор к переменной и сохранить результат в ней же, например:
Эту запись можно укоротить при помощи совмещённых операторов, вот так:
Вызов с присваиванием имеет в точности такой же приоритет, как обычное присваивание, то есть выполнится после большинства других операций:
Один из самых необычных операторов — запятая ‘,’ .
Его можно вызвать явным образом, например:
Запятая позволяет перечислять выражения, разделяя их запятой ‘,’ . Каждое из них — вычисляется и отбрасывается, за исключением последнего, которое возвращается.
Запятая — единственный оператор, приоритет которого ниже присваивания. В выражении a = (5,6) для явного задания приоритета использованы скобки, иначе оператор ‘=’ выполнился бы до запятой ‘,’ , получилось бы (a=5), 6 .
Зачем же нужен такой странный оператор, который отбрасывает значения всех перечисленных выражений, кроме последнего?
Обычно он используется в составе более сложных конструкций, чтобы сделать несколько действий в одной строке. Например:
Такие трюки используются во многих JavaScript-фреймворках для укорачивания кода.