009 Java Arithmetic Operators

Операторы в Java — введение в Java 009 #

Мы уже использовали многое в наших программах не задумываясь. Например знаками знакомыми нам из школьной математики: +, -, = и др.. Пришло время узнать весь список доступных в Java операторов и применение.

Заранее скажу, что для введения в Java достаточно понимать первые две таблицы - арифметические операторы и операторы сравнения.

Арифметические операторы - arithmetic operators #

Оператор Пример использования Пояснение
+ a + b Сложение
- a - b Вычитание (также унарный минус)
* a * b Умножение
/ a / b Деление
% a % b Деление по модулю
++ a++ Инкремент, а++ соответствует а = а + 1
a– Декремент, а– соответствует а = а - 1
+= a += b Сложение с присваиванием Выражение a += b эквивалентно значению a = a + b.
-= a -= b Вычитание с присваиванием
*= a *= b Умножение с присваиванием
/= a /= b Деление с присваиванием
%= a %= b Деление по модулю с присваиванием

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

Операторы сравнения #

Мы с ними немного познакомились при рассмотрении: тип данных boolean и логические операторы.

Оператор Пример Пояснение
== a == b a соответствует(равно) b
!= a != b a не соответствует(не равно) b
> a > b а больше b
>= a >= b а больше либо равно b
< a < b а меньше b
<= a <= b а меньше либо равно b
&& a && b а и b истинны, b оценивается условно (если а ложно, b не вычисляется)
|| a || b а или b истинно, b оценивается условно (если а истинно, b не вычисляется)
! !a а ложно
& a & b AND, а и b истинны, b оценивается в любом случае
| a | b OR, а или b истинно, b оценивается в любом случае
^ a ^ b XOR, а и b различны (исключительное или, побитовое логическое или)

Побитовые операторы #

Побитовые операторы работают с целыми числами, то есть с типами данных long, int, short, char(!), byte.

Оператор Пояснение
~ Побитовый унарный оператор NOT
& Побитовый AND
&= Побитовый AND с присваиванием
| Побитовый OR
| = Побитовый OR с присваиванием
^ Побитовый исключающий OR
^= Побитовый исключающее OR с присваиванием
>> Сдвиг вправо
>= Сдвиг вправо с присваиванием
>>> Сдвиг вправо с заполнением нулями
« Сдвиг влево
«= Сдвиг влево с присваиванием
>>>= Сдвиг вправо с заполнением нулями с присваиванием

Побитовые операторы не самая простая тема и требует повторения/изучения математической составляющей. Её точно можно оставить “на потом” в базовое программирование эта тема не входит. Изучив и эту тему вы станете на один шаг ближе к “стать программистом”.

Доп. ссылки:

  1. Битовый сдвиг
  2. Побитовые операции в Java
  3. Побитовые операторы
  4. RAID

Логические операторы #

Логический операторы Значение
== Проверка на соотвествие (допустим, что a равен b)
!= Неравно (eсли a неравно b, то)
! Отрицание, логическое не
& Логическое И, and
| Логическое или, or
^ Исключительное или, XOR
&& Укороченный &
|| Укороченный или
&= AND с присваиванием
|= OR с присваиванием
^= XOR с присваиванием
?: Тернарный (троичный) условный оператор

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

Операторы присваивания #

Операторы присваивания содержат в себе знак равенства =. Все их мы уже рассмотрели в рамках других операторов. И в этом нет никакого противоречия. Java многогранна и её не всегда можно однозначно описать простым языком кожаных мешков. Тот же += является одновременно оператором арифметическим и присваивания.

Это не значит, что вы не можете составить таблицу операторов сравнения самостоятельно.

Для факультативного изучения #

  1. Помимо всего прочего, операторы бывают унарными. Соответственно существуют бинарные и тернарные операторы.
  2. Логические операторы && и || - это укороченные версии операторов & и |.

Отличие заключается в том, что например в укороченной версии (или), если первый операнд имеет значение (true), то выражение сразу становится (true) и второй операнд даже не рассматривается. То же самое и с (и), если первый операнд имеет ложное значение (false), то и все выражение сразу становится (false), второй операнд не рассматривается. И соответственно благодаря тому, что значение второго операнда вычислять не нужно, экономится время и повышается эффективность кода.

Пример:

public class AndAnd {
          public static void main(String[] args) {
            if(a() && b()){  //здесь меняем оператор и сравниваем результаты
                System.out.println("Готово");
            }else{
                System.out.println("Не получилось");
            }
        }
        public static boolean a(){
            System.out.print("Hallo ");
            return false;
        }
        public static boolean b(){
            System.out.println("World");
            return true;
        }
}
  • //Если использовать оператор &&, то

  • Hallo Не получилось

  • //Вывод при использовании оператора &

  • Hallo World

  • Не получилось

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

Дополнительные материалы #

  1. https://docs.oracle.com/javase/tutorial/java/nutsandbolts/opsummary.html
  2. https://docs.oracle.com/javase/tutorial/java/nutsandbolts/operators.html
  3. https://docs.oracle.com/javase/tutorial/java/nutsandbolts/op2.html
  4. Прекраснейшая статья о побитовом сдвиге - https://javarush.ru/groups/posts/1925-pobitovihe-operacii
  5. https://www.baeldung.com/java-compound-operators

Очень рекомендую ресурс - www.baeldung.com. На проекте очень много грамотных постов о Java и из мира Java. Можно ввести в Google запрос “baeldung cast int” и получить прекрасную статью для самостоятельного изучения конвертации данных из типа данных String в int. Ресурс определённо в закладки.

Домашнее задание #

  1. Ознакомьтесь с термином - body mass index (BMI) Индекс массы тела .
  2. Напишите программу расчёта индекса массы тела.
  3. Если возникнут сложности, помните, что у вас есть все знания, что бы решить данную задачу. Просто решите её сначала на бумаге, а потом перенесите в Java.
comments powered by Disqus