Операция взятия остатка от деления в Java

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

Еще из арифметики известно, что числа можно складывать умножать делить и отнимать. Все это осуществляется за счет операторов: +, — ,/ , *, и других. Также для выполнения сложных алгебраических расчетов в языке предусмотрены математические функции. Но на сейчас больше интересуют именно операторы, поэтому разберем каждый из них по подробнее.

Арифметика

Рассмотрим на примерах основные арифметические операторы и опробуем их в действии

Сложение

За сложение отвечает оператор «+»:

int x = 5;
int y = 25;
int z = x+y;
System.out.println(z); // 30

Вычитание

За вычитание отвечает оператор «-«:

int x = 5;
int y = 25;

z = y-x;
System.out.println(z); // 20

Деление

Деление выполняется оператором-слэшем»/»:

int x = 5;
int y = 25;

z = y/x;
System.out.println(z); // 5

Умножение

Для умножения предусмотрен оператор «*»:

int x = 5;
int y = 25;

z = y*x;
System.out.println(z); // 125

Инкремент и декремент

Чтобы увеличить значение на 1 или более, а затем сохранить его в ту же переменную, из которой оно было получено, следует выполнить следующую операцию: x = x + 1.

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

Инкремент выражается оператором «++» или «—«. Есть как префиксные инкременты, которые ставятся перед переменной, постфиксные ставятся справа от нее.

Пример:

int x = 50;

x++ // Постфиксный инкремент сохраняет значение 50 до следующего оператора
System.out.println(x); // прибавляется 1 и выводится 51.
// Теперь префиксный инкремент
++x; // сразу прибавляется 1 и теперь значение равно 52

Если требуется прибавить и сохранить больше одного, то делают так:

int x = 50;
x+=10; // То же, что и x=x+10, результат равен 60;
x*=2; // умножаем на 2, получаем в x значение 120;

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

int a = 1;

a = a+1; // a = 2
a += 5; // a = 7
++a; // a = 8
a /=2; // a = 4

Приоритеты операторов в крупных выражениях

Допустим нам нужно посчитать получить результат такого выражения:

int a = 5 * 6+6 + (++5);

Здесь явно ожидается результат 32. Однако на деле совсем иначе:

  1. Первым выполняется (++5).
  2. Затем 5 * 6.
  3. Затем 30 + 6.
  4. В конце 36 + 6.
  5. Результат будет 42.

Дело в том, что в арифметических операциях программирования есть приоритеты и расставлены они следующим образом:

  1. Первым выполняются инкременты или декременты.
  2. Затем умножение, деление или остаток от деления.
  3. Затем только сложение или вычитание.

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

Деление с остатком

Деление с остатком также практикуется в большинстве языков программирования. Для этого предусмотрен оператор «%». При делении четных чисел, всегда возвращается ноль. При делении нечетных чисел, складываются десятые доли от числа.

Пример:

System.out.println(3%2) // 1

Такой результат произошел по следующим причинам:

  1. 3/2 = 1.5;
  2. два по полтора равно 3;
  3. отбрасываем единицу и складываем 0.5 + 0.5 = 1.

Другой пример:

printf(7%4); // 3

Разберемся почему получился такой результат:

  1. 7/4 = 1.75;
  2. 0.75 * 4 = 3;
  3. 3 + 4 = 7.

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

Деление с остатком четных чисел. Пример:

8%4 // 0

При делении с остатком четных чисел, всегда результат является 0.

Оператор «+» для типа String и Char

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

Пример:

System.out.println(«Hello » + «World!»); // Hello World

При сложении числа со строкой будет следующий результат:

System.out.println(«HELLO» + 10); // HELLO10 — число преобразовалось в строку
System.out.println(«10″+10); // 1010
System.out.println(«10» * 10); // Будет ошибка Type Error

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

Что касается типа Char, то здесь сложение работает иначе. Каждый буквенный символ имеет свой код UTF-8, выражаемый целым числом. К примеру символ ‘b’ в числовом формате выражен числом 98, пробел — 32, ‘a’ — 97 и так далее. Теперь попробуем осуществить математическую операцию с символами.

Пример:

System.out.println (‘b’ + 10); // 98 + 10 = 100

Если сложить символ с числом, то символ автоматически конвертируется в числовой формат. Сложение двух символов также выдает числовой формат.

System.out.println(‘a’+’b’); // 98+97 = 195

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

Подводя итоги

Java предоставляет весь необходимый набор арифметических операторов: сложение, вычитание, умножение, деление, деление с остатком. Нельзя выполнять арифметические операции над строковыми литералами. Однако это возможно при работе с символами. При использовании арифметических операторов над символами, те переводятся в числовой формат, который выражает код символа в UTF-8.

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

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

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

Добавить комментарий

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