Арифметические операторы
1. Основные арифметические операторы Java
В следующей таблице перечислены основные арифметические операторы (или операции), применяемые в языке Java:
Арифметические операторы
| Операция | Описание |
|---|---|
| + | Сложение (а также унарный плюс) |
| - | Вычитание (а также унарный минус) |
| * | Умножение |
| / | Деление |
| % | Деление по модулю |
Рассмотрим некоторые правила работы с арифметическими операторами:
- Выражения вычисляются слева направо, если не добавлены круглые скобки или одни операции имеют более высокий приоритет.
- Операции
*,/, и%имеют более высокий приоритет чем+и-.
Арифметические операторы над целочисленными значениями
Например, в этом коде, переменные a и b будут иметь разные значения:
public class BasicIntMath {
public static void main(String[] args) {
int a = 4 + 5 - 2 * 3;
int b = 4 + (5 - 2) * 3;
System.out.println("a = " + a);
System.out.println("b = " + b);
}
} Результат выполнения:
a = 3
b = 13 Унарные операции сложения и вычитания
- Операция унарного вычитания изменяет знак своего единственного операнда.
- Операция унарного сложения просто возвращает значение своего операнда. Она в принципе не является необходимой, но возможна.
public class UnarySignOperation {
public static void main(String[] args) {
double a = -6;
double b = +6;
System.out.println(a);
System.out.println(b);
}
} Деление целочисленных чисел в Java
Когда операция деления выполняется над целочисленным типом данных, ее результат не будет содержать дробный компонент. Это деление без остатка в Java:
public class IntDivision {
public static void main(String[] args) {
int a = 16 / 5;
System.out.println(a);
}
} Результат выполнения этой программы:
3 Арифметические операторы над переменными типа char
Операнды арифметических операторов должны иметь числовой тип. Арифметические операторы нельзя выполнять над логическими типами данных, но допускается над типами данных char, поскольку в Java этот тип, по существу, является разновидностью типа int. Например:
public class BasicCharMath1 {
public static void main(String[] args) {
char c = 'n';
System.out.println(c);
System.out.println(c + 1);
System.out.println(c / 5);
}
} Результат выполнения:
n
111
22 Или как в следующем примере:
public class BasicCharMath2 {
public static void main(String[] args) {
char c1 = '1';
char c2 = '\u0031';
char c3 = 49;
System.out.println(c1 + c2 + c3);
}
} Результат выполнения:
147 Деление по модулю в Java
Оператор деления по модулю — обозначается символом %. Этот оператор возвращает остаток от деления первого числа на второй в Java. При делении целого числа результатом будет так же целое число:
public class DivisionByModule {
public static void main(String[] args) {
int a = 6 % 5;
double b = 6.2 % 5.0;
System.out.println(a);
System.out.println(b);
}
} Результат выполнения:
1
1.2000000000000002 2. Составные арифметические операции с присваиванием
Составные арифметические операторы
| Операция | Описание |
|---|---|
| += | Сложение с присваиванием |
| -= | Вычитание с присваиванием |
| *= | Умножение с присваиванием |
| /= | Деление с присваиванием |
| %= | Деление по модулю с присваиванием |
В Java имеются специальные операции, объединяющие арифметические операторы с операцией присваивания. Рассмотрим следующее выражение:
a = a + 4; В Java эту операцию можно записать следующим образом:
a += 4; Составные операции с присваиванием позволяют не только уменьшить объем кода, но и выполнять автоматическое преобразование, чего не делают обычные операции. Например, этот пример работать будет:
byte b = 10;
b += 5; А в следующем будет ошибка компиляции:
byte b = 10;
b = b + 5; public class CompoundOperations {
public static void main(String[] args) {
int a = 1;
int b = 2;
int c = 3;
a += 3;
b *= 2;
c += a * b;
System.out.println(a);
System.out.println(b);
System.out.println(c);
}
} Часто задаваемые вопросы
Почему 16 / 5 в Java даёт 3, а не 3.2?
Потому что оба операнда — целые числа (int), а при делении целочисленных значений результат тоже целый: дробная часть просто отбрасывается, без округления. Поэтому 16 / 5 даёт 3. Чтобы получить дробный результат 3.2, хотя бы один из операндов должен быть числом с плавающей точкой, например 16.0 / 5 или 16 / 5.0.
Что делает оператор деления по модулю %?
Оператор % возвращает остаток от деления первого числа на второе. Например, 6 % 5 равно 1, потому что 6 делится на 5 один раз с остатком 1. Оператор работает и с дробными числами: 6.2 % 5.0 даёт 1.2. Деление по модулю часто используют, чтобы проверить чётность числа (n % 2 == 0) или получить остаток в циклических вычислениях.
Почему к типу char можно применять арифметические операторы?
Потому что в Java тип char по существу является разновидностью целочисленного типа: он хранит код символа по таблице Unicode. При использовании в арифметике char автоматически преобразуется в его числовой код. Например, символ 'n' имеет код 110, поэтому 'n' + 1 даёт 111. Арифметику нельзя применять только к типу boolean.
Чем a += 4 отличается от a = a + 4?
Результат вычисления одинаковый, но составной оператор += дополнительно выполняет неявное приведение результата обратно к типу переменной. Поэтому для byte b = 10; запись b += 5; компилируется, а b = b + 5; — нет: во втором случае результат b + 5 имеет тип int, который нельзя присвоить в byte без явного приведения. Кроме того, += делает код короче.
Презентацию с видео можно скачать на Patreon.
Видео объяснение
Предпочитаете видеоформат? Посмотрите этот урок с примерами и объяснениями.
Комментарии