Что значит унарный оператор
Унарные операторы в Java
Уже завтра в OTUS скоро стартует новая профессиональная программа по подготовке к сертификации Oracle Java Programmer (OCAJP). Предлагаем вам посмотреть запись бесплатного Demo-урока «Типы данных Java: Идентификаторы и примитивы» и продолжаем публиковать серию статей Владислава Родина — руководителя группы разработки, преподавателя в МФТИ и foxminded.
Введение
Приоритет операторов
Оператор принимает на вход аргументы и возвращает некоторые значения. Выделяют унарные, бинарные и тернарные операторы. Например, !false — унарный, a + b — бинарный, а? : — является единственным оператором, принимающим на вход три аргумента.
Первое, что необходимо помнить, это приоритет выполнения операторов:
Работа с унарными операторами
Про бинарные операторы мы говорили в прошлый раз. Сегодня обсудим унарные операторы, что следует из названия статьи. На экзамене могут предлагать достаточно сложные выражения для вычисления которых необходимо помнить порядок их выполнения.
Операторы смены знака и логической инверсии
Оператор логической инверсии ! применяется только к переменным типа boolean и превращает значение из true в false и наоборот. Например:
Оператор смены знака — применяется только к числам и меняет знак на противоположный:
Java в отличии от того же C четко разделяет целочисленные типы данных и boolean, в связи с чем применение оператора смены знака к boolean либо же применение оператора логической инверсии приводят к ошибкам компиляции:
Операторы инкремента и декремента
Операторы инкремента ++ и декремента — применяются к целочисленным переменным и обладают двумя вариациям: post-инкремент (декремент) и pre-инкремент (декремент), в коде i++ (i—) и ++i (—i) соответственно. Разница между вариациями в том, что ++i увеличивает переменную и возвращает новое значение, а i++ возвращает старое значение, а только затем увеличивает переменную. Разницу более наглядно можно увидеть в таком куске кода:
На экзамене могут предлагаться различные хитрые задания, где таких операторов вагон и маленькая тележка. Например, может быть предложено такое задание.
Что будет выведено в результате выполнения данной программы?
Проблема заключается в том, что x меняется несколько раз в одной строке.
Для решения таких задач можно разбирать выражение слева направо, подставляя в выражение то, что возвращают операторы, и фиксируя отдельно значение изменяемой переменной. Например, вот так:
Как видите, применяются все обозначенные выше правила применения операторов. В результате выведено будет следующее:
В этой статье вы узнаете о различных типах операторов Java и их синтаксисе.
Операторы это специальные символы, которые осуществляют операции над операндами ( переменными и значениями ). Например, « + » это оператор, который производит сложение.
Сейчас вы узнаете, как использовать операторы, чтобы манипулировать переменными.
Операторы присваивания
Пример 1: оператор присваивания
Когда вы запустите программу, на экран выведется:
Арифметические операторы
Арифметические операторы Java используются, чтобы производить математические операции сложения, вычитания умножения и так далее.
Оператор | Значение |
---|---|
+ | Сложение (также используется для конкатенации строк) |
— | Вычитание |
* | Умножение |
/ | Деление |
% | Остаток от деления |
Пример 2: Арифметические операторы
Когда вы запустите программу, на экран выведется:
Оператор « + » также может быть использован, чтобы соединить ( конкатенировать ) две строки или больше.
Пример 3: Арифметический оператор
Когда вы запустите программу, на экран выведется:
Унарные операторы
Унарный оператор Java производит операцию только над одним операндом.
Оператор | Значение |
+ | Унарный плюс (не нужен, так как числа положительные и без него). |
— | Унарный минус; инвертирует знак выражения. |
++ | Оператор инкремента; увеличивает значение на 1. |
— | Оператор декремента; уменьшает значение на 1. |
! | Оператор логического отрицания; инвертирует значение булевой переменной. |
Пример 4: Унарный оператор
Когда вы запустите программу, на экран выведется:
Есть большая разница в использовании операторов Java инкремента и декремента в префиксе и в постфиксе. Рассмотрим следующий пример.
Пример 5: Унарный оператор
Когда вы запустите программу, на экран выведется:
Операторы равенства и отношений
Оператор instanceof
Логические операторы Java
Логические операторы Java || ( условное-ИЛИ (OR) ) и && ( условное-И (AND) ) совершают операции над булевыми выражениями. Вот как они работают.
Оператор | Описание | Пример |
|| | условное-ИЛИ; true если хотя бы одно из булевых выражений истинно (true) | false || true результат — true |
&& | условное-И; истинно если все булевы выражения истинны (true). | false && true результат — false |
Пример 8: Логические операторы Java
Когда вы запустите программу, на экран выведется:
Тернарный оператор
Вот как это работает.
Пример 9: Тернарный оператор
Когда вы запустите этот тернарный оператор Java пример, на экран выведется:
Побитовые операторы Java и смещение битов
Чтобы осуществлять побитовые операции Java предоставляет следующие операторы.
Эти операторы применяются нечасто.
Другие операторы присваивания
Пожалуйста, опубликуйте свои отзывы по текущей теме материала. Мы очень благодарим вас за ваши комментарии, подписки, лайки, дизлайки, отклики!
Дайте знать, что вы думаете по этой теме материала в комментариях. За комментарии, подписки, отклики, лайки, дизлайки огромное вам спасибо!
Базовые операторы, математика
В этой главе мы начнём с простых операторов, а потом сконцентрируемся на специфических для JavaScript аспектах, которые не проходят в школьном курсе арифметики.
Термины: «унарный», «бинарный», «операнд»
Прежде, чем мы двинемся дальше, давайте разберёмся с терминологией.
Унарным называется оператор, который применяется к одному операнду. Например, оператор унарный минус «-» меняет знак числа на противоположный:
Бинарным называется оператор, который применяется к двум операндам. Тот же минус существует и в бинарной форме:
Формально, в последних примерах мы говорим о двух разных операторах, использующих один символ: оператор отрицания (унарный оператор, который обращает знак) и оператор вычитания (бинарный оператор, который вычитает одно число из другого).
Математика
Поддерживаются следующие математические операторы:
Первые четыре оператора очевидны, а про % и ** стоит сказать несколько слов.
Взятие остатка %
Возведение в степень **
В выражении a ** b оператор возведения в степень умножает a на само себя b раз.
Математически, оператор работает и для нецелых чисел. Например, квадратный корень является возведением в степень 1/2 :
Сложение строк при помощи бинарного +
Давайте рассмотрим специальные возможности операторов JavaScript, которые выходят за рамки школьной арифметики.
Обычно при помощи плюса ‘+’ складывают числа.
Но если бинарный оператор ‘+’ применить к строкам, то он их объединяет в одну:
Обратите внимание, если хотя бы один операнд является строкой, то второй будет также преобразован в строку.
Как видите, не важно, первый или второй операнд является строкой.
Вот пример посложнее:
Например, вычитание и деление:
Приведение к числу, унарный +
Плюс + существует в двух формах: бинарной, которую мы использовали выше, и унарной.
Унарный, то есть применённый к одному значению, плюс + ничего не делает с числами. Но если операнд не число, унарный плюс преобразует его в число.
Необходимость преобразовывать строки в числа возникает очень часто. Например, обычно значения полей HTML-формы — это строки. А что, если их нужно, к примеру, сложить?
Бинарный плюс сложит их как строки:
Поэтому используем унарный плюс, чтобы преобразовать к числу:
С точки зрения математика, такое изобилие плюсов выглядит странным. Но с точки зрения программиста тут нет ничего особенного: сначала выполнятся унарные плюсы, которые приведут строки к числам, а затем бинарный ‘+’ их сложит.
Почему унарные плюсы выполнились до бинарного сложения? Как мы сейчас увидим, дело в их приоритете.
Приоритет операторов
В том случае, если в выражении есть несколько операторов – порядок их выполнения определяется приоритетом, или, другими словами, существует определённый порядок выполнения операторов.
Из школы мы знаем, что умножение в выражении 1 + 2 * 2 выполнится раньше сложения. Это как раз и есть «приоритет». Говорят, что умножение имеет более высокий приоритет, чем сложение.
В JavaScript много операторов. Каждый оператор имеет соответствующий номер приоритета. Тот, у кого это число больше, – выполнится раньше. Если приоритет одинаковый, то порядок выполнения – слева направо.
Отрывок из таблицы приоритетов (нет необходимости всё запоминать, обратите внимание, что приоритет унарных операторов выше, чем соответствующих бинарных):
Приоритет | Название | Обозначение |
---|---|---|
… | … | … |
17 | унарный плюс | + |
17 | унарный минус | — |
16 | возведение в степень | ** |
15 | умножение | * |
15 | деление | / |
13 | сложение | + |
13 | вычитание | — |
… | … | … |
3 | присваивание | = |
… | … | … |
Присваивание
Присваивание = возвращает значение
Тот факт, что = является оператором, а не «магической» конструкцией языка, имеет интересные последствия.
Вызов x = value записывает value в x и возвращает его.
Благодаря этому присваивание можно использовать как часть более сложного выражения:
В примере выше результатом (a = b + 1) будет значение, которое присваивается переменной a (то есть 3 ). Потом оно используется для дальнейших вычислений.
Забавное применение присваивания, не так ли? Нам нужно понимать, как это работает, потому что иногда это можно увидеть в JavaScript-библиотеках.
Однако писать самим в таком стиле не рекомендуется. Такие трюки не сделают ваш код более понятным или читабельным.
Присваивание по цепочке
Рассмотрим ещё одну интересную возможность: цепочку присваиваний.
Опять-таки, чтобы код читался легче, лучше разделять подобные конструкции на несколько строчек:
Польза от такого стиля особенно ощущается при быстром просмотре кода.
Сокращённая арифметика с присваиванием
Часто нужно применить оператор к переменной и сохранить результат в ней же.
Эту запись можно укоротить при помощи совмещённых операторов += и *= :
Урок №17. Операторы
Как мы уже знаем из предыдущих уроков, выражение — это математический объект, который имеет определенное значение. Однако, термин «математический объект» несколько расплывчатый. Точнее будет так: выражение — это комбинация литералов, переменных, функций и операторов, которая генерирует (создает) определенное значение.
Литералы
Литерал — это фиксированное значение, которое записывается непосредственно в исходном коде (например, 7 или 3.14159 ). Вот пример программы, которая использует литералы:
Литералы, переменные и функции еще известны как операнды. Операнды — это данные, с которыми работает выражение. Литералы имеют фиксированные значения, переменным можно присваивать значения, функции же генерируют определенные значения (в зависимости от типа возврата, исключением являются функции типа void).
Операторы
Примечание: Очень часто новички путают оператор присваивания ( = ) с оператором равенства ( == ). С помощью оператора присваивания ( = ) мы присваиваем переменной определенное значение. С помощью оператора равенства ( == ) мы проверяем, равны ли между собой два определенных операнда.
Операторы бывают трёх типов:
Тернарные. Работают с тремя операндами (в языке C++ есть только один тернарный оператор).
Заключение
Это только верхушка айсберга. Более детально об операторах мы обязательно поговорим на следующих уроках.
Поделиться в социальных сетях:
Выражения и операторы
Эта глава описывает выражения и операторы языка 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 бит вправо, отбрасывая сдвигаемые биты и добавляя слева нули. |
Битовые логические операторы
Основной смысл работы битовых логических операторов состоит в следующем: