JavaRush/Java блог/Java Developer/Операции над числами в Java
Автор
Jesse Haniel
Главный архитектор программного обеспечения в Tribunal de Justiça da Paraíba

Операции над числами в Java

Статья из группы Java Developer
участников
Привет! Сегодня мы рассмотрим очень важную тему, а именно — операции над числами в Java. Числа в программировании повсюду. Если копнуть в школьный курс, можно вспомнить, что вся информация в компьютере представлена в числовом формате — комбинациями нулей и единиц — которое еще называют двоичным кодом. Операции над числами в Java - 2Операций над числами в программировании существует великое множество, поэтому мы рассмотрим наиболее важные из них с примерами :)

Арифметические операции

Начнем с самого простого — с арифметических операций. Это известные всем сложение (знак +), вычитание (-), умножение (*) и деление (/).
public class Main {

   public static void main(String[] args) {

       int x = 999;
       int y = 33;

       System.out.println(x+y);
       System.out.println(x-y);
       System.out.println(x*y);
       System.out.println(x/y);
   }
}
Вывод в консоль:

1032
966
32967
30
Всем этим ты уже пользовался. К ним можно прибавить операцию % — остаток от деления.
public class Main {

   public static void main(String[] args) {

       int x = 33;
       int y = 33%2;
       System.out.println(y);
   }
}
Вывод в консоль:

1
В этом примере мы делим 33 на 2. В результате у нас получается 16 и остается лишний “хвост”, который на 2 не делится — единица. Этот "хвост" и будет результатом операции “остаток от деления”. В Java (как и в математике) реализованы операции сравнения. Они тебе тоже наверняка знакомы еще со школы:
  • равно (==)
  • больше (>)
  • меньше (<)
  • больше либо равно (>=)
  • меньше либо равно (<=)
  • не равно (!=)
Здесь стоит обратить внимание на один важный момент, в котором многие новички допускают ошибки. Операция “равно” записывается как ==, а не одним знаком =. Единичный знак = в Java является оператором присваивания, когда переменной присваивается число, строка, или значения другой переменной. Операции над числами в Java - 3
public class Main {

   public static void main(String[] args) {

       int x = 33;
       int y = 999;
       System.out.println(x=y);//ожидаем, что в консоль будет выведено false
   }
}
Вывод в консоль:

999
Упс! Это явно не тот результат, на который мы рассчитывали. Это вообще другой тип данных: мы ожидали увидеть boolean, а получили число. Все потому, что в скобках у нас операция присваивания, а не сравнения. x=y Значение y (999) было присвоено переменной x, и после мы вывели x на консоль. Правильный вариант:
public class Main {

   public static void main(String[] args) {

       int x = 33;
       int y = 999;
       System.out.println(x==y);
   }
}
Вывод в консоль:

false
Вот теперь мы правильно сравнили 2 числа! :) Еще одна особенность операции присваивания (=) — ее можно осуществлять “по цепочке”:
public class Main {

   public static void main(String[] args) {

       int x = 999;
       int y = 33;
       int z = 256;

       x = y = z;
       System.out.println(x);
   }
}
Вывод в консоль:

256
Запомни: присваивание осуществляется справа налево. Данное выражение (x = y = z) будет выполнено по шагам:
  • y = z , то есть у = 256
  • x = y, то есть x = 256

Унарные операции

Они называются “унарными” от слова “uno” — “один”. Такое название они получили потому, что в отличие от предыдущих, проводятся над одним числом, а не над несколькими. К ним относятся:
  • Унарный минус. Он меняет знак числа на противоположный.

    public class Main {
    
       public static void main(String[] args) {
    
           int x = 999;
    
           //меняем знак первый раз
           x = -x;
           System.out.println(x);
    
           //меняем знак второй раз
           x= -x;
           System.out.println(x);
       }
    }

    Вывод в консоль:

    
    -999
    999
    

    Мы использовали унарный минус два раза. В результате наше число стало сначала отрицательным, а потом снова положительным!

  • Инкремент (++) и декремент (--)

    Операция ++ увеличивает число на единицу, а операция -- уменьшает на эту же самую единицу.

    public class Main {
    
       public static void main(String[] args) {
    
           int x = 999;
           x++;
           System.out.println(x);
    
           x--;
           System.out.println(x);
       }
    }

    Вывод в консоль:

    
    1000
    999
    
Такая форма записи может быть тебе знакома, если ты слышал о языке С++. С помощью такого интересного названия его создатели передали свою идею: "C++ является расширением языка C". А популярная улучшенная версия "Блокнота" называется Notepad++ Важный момент. Операции инкремента и декремента бывают двух видов: постфиксными, и префиксными. x++ — постфиксная запись ++x — префиксная запись В чем же заключается принципиальная разница, если ставить плюсы-минусы перед числом или после? Увидим на примере:
public class Main {

   public static void main(String[] args) {

       int x = 999;
       int y = x++;
       System.out.println(y);
   }
}
Вывод в консоль:

999
Что-то не так! Мы хотели увеличить x на 1 и присвоить новое значение переменной y. То есть y должен быть равен 1000. Но у нас другой результат — 999. Получается, x не был увеличен, и операция инкремента не сработала? Еще как сработала. Чтобы в этом убедиться, попробуй вывести x на консоль в конце :)
public class Main {

   public static void main(String[] args) {

       int x = 999;
       int y = x++;
       System.out.println(y);
       System.out.println(x);
   }
}
Вывод в консоль:

999
1000
На самом деле, постфиксная операция потому так и называется: она выполняется после основного выражения. То есть в нашем случае: int y = x++; сначала выполняется y = x (и переменной y будет присвоено изначальное значение x), а только потом x++ Как быть, если нас не устраивает такое поведение? Нужно использовать префиксный способ записи:
public class Main {

   public static void main(String[] args) {

       int x = 999;
       int y = ++x;
       System.out.println(y);
   }
}
В этом случае сначала отработает ++x и только после этого y = x; Эту разницу стоит запомнить сразу, чтобы не совершить ошибок в реальной программе, в которой все поведение может из-за этого встать с ног на голову :)

Комбинированные операции

Кроме того, в Java существуют так называемые комбинированные операции. В них используется комбинация из двух операций:
  • Присваивание
  • Арифметическая операция
Сюда входят операции:
  • +=
  • -=
  • *=
  • /=
  • %=
Рассмотрим пример:
public class Main {

   public static void main(String[] args) {

       int x = 999;
       int y = 33;

       x += y;
       System.out.println(x);
   }
}
Вывод в консоль:

1032
x += y означает x = x + y. Просто для краткости записи используется два знака подряд. Так же это работает с комбинациями -=, *= , /= и %=.

Логические операции

Помимо операций над числами, в Java существуют также операции над булевыми переменными — true и false. Эти операции выполняются с помощью логических операторов
  • ! — оператор “НЕ”. Меняет значение булевой переменной на противоположное

    public class Main {
    
       public static void main(String[] args) {
    
           boolean x = true;
           System.out.println(!x);
       }
    }

    Вывод в консоль:

    
    false
    

  • && — оператор “И”. Возвращает значение true только в том случае, если оба операнда являются true.

    public class Main {
    
       public static void main(String[] args) {
    
           System.out.println(100 > 10 && 100 > 200);
           System.out.println(100 > 50 && 100 >= 100);
       }
    }

    Вывод в консоль:

    
    false
    true
    

    Результатом первой операции является false, поскольку одно из условий является ложным, а именно 100 > 200. Оператору && для того, чтобы вернуть true требуется, чтобы истинными были все условия (как во второй строке, например).

  • || — оператор “ИЛИ”. Возвращает true, когда хотя бы один из операндов истинный.

    Здесь наш предыдущий пример уже отработает по-другому:

    public class Main {
    
       public static void main(String[] args) {
    
           System.out.println(100 > 10 || 100 > 200);
       }
    }

    Вывод в консоль:

    
    true
    

    Выражение 100 > 200 по-прежнему ложно, но оператору “или” вполне достаточно, что первая часть (100 > 10) является истинной.

Комментарии (206)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Mosca Sanzara
Уровень 4
17 апреля, 16:55
Вы хотели написать "операции над булевыми значениями true и false"...
Дмитрий
Уровень 4
5 марта, 10:05
Тут все ясно и понятно) Все как в пайтоне, который учил не так давно 😌
madmax
Уровень 15
4 марта, 15:43
подскажите есть ли похожая статья по всем логическим операциям? хотелось бы подробно почитать про & | ^. И было бы здорово если кто даст ссылку про побитовые операции, вообще не знаком с ними
Javagator #3400119
Уровень 4
Expert
14 февраля, 14:20
В далеких нулевых, когда все мы еще ощущали особую глубину интернета, а я был классе в 7 мне довелось взаимодействовать с Си подобным языком Pawn, на нем тогда можно было пилить сервера для GTA:Sa Online. Было очень ценно находить материалы для изучения и еще более ценным было когда, что-то получалось. Прошли года, прежде чем я твердо решил, что для самоуважения (и не только😉) необходимо полноценно освоить язык программирования. Выбрал Java. Повезло узнать о JavaRush. Уважаемые коллеги, спасибо за всю ту ГЛУБИНУ, которую я ощущаю на JavaRush. Это очень приятно! 👍
Anastasiia
Уровень 7
Expert
2 февраля, 13:18
Пока что для меня это единственная лекция, в которой понятно ВСЁ Тоже были вопросы при инкремент и декремент, но я приняла ситуацию (разобралась) 😁
Олег Королев
Уровень 3
Expert
19 января, 15:49
Совсем не догоняю логику как работает постфиксная операция в описанном примере. int x = 999; int y = x++; System.out.println(y); System.out.println(x); 999 1000 Говорится что сначала выполняется y = x (и переменной y будет присвоено изначальное значение x), а только потом x++. Т.е значению y присваивается значение 999,а потом 1000. Но зачем мне знать 2 присваеваемых значения y? Если выводится один x и один y. Даже если так, y=1000, а x=999, то с ответами не бъется.
Денис
Уровень 7
20 января, 12:16
int y = x++; следует читать так: int y = x = x + 1; - в случае "x++" сначала "y" будет присвоено текущее значение "x" (999), а затем "х" будет увеличен на 1; - в случае "++x" сначала текущее значение "x" (999) будет увеличено на 1, а затем "y" будет присвоено значение "x" ( уже 1000).
Семен
Уровень 4
19 марта, 13:22
Спасибо!
Семен
Уровень 4
19 марта, 13:26
тогда, по аналогии: int y = ++x; следует читать так: int y = x + 1 = x; ??
special
Уровень 11
7 января, 06:00
Все еще не понимаю как компилятор читает код. Вроде как слева направо, но присвоение идет справа налево. А когда идет постфик++ сначала справа налево, а потом слева направо. Как так работает, что у = сначала х, а только потом х++. Почему она сразу не присваивает? Вообщем, мне кажется нужна подробная лекция или объяснение о всей сути чтения программ.
YUREC
Уровень 36
7 января, 09:34
компилятор читает последовательно по выражениям разделенным точкой с запятой. При чтении такого выражения нет никакого слева направо, а есть приоритет операций, про него тут пока информации действительно не давали. Про такие нюансы кстати постоянно забывают объяснять на многих курсах. Зато в любом стареньком ВУЗовском учебнике по программированию про это будет.
special
Уровень 11
13 января, 06:09
Спасибо! Подскажите, значит ли это, что стоит купить или найти в интернете какой-нибудь старый вузовский учебник? Если да, то какой?
YUREC
Уровень 36
13 января, 08:08
Купить нет, а почитать да. Лично я про приоритеты операций читал в учебнике МГТУ им Баумана. Г.С. Ивановой "Основы программирования" когда в вузе учился на начальных курсах. Учебник этот легко находится и скачивается в интернете.
Vladimir Belanenko
Уровень 6
20 декабря 2023, 12:42
После выражения public static void main(String[] args) { слова "для краткости записи" вызывают нервный тик...
mz
Уровень 10
4 ноября 2023, 15:50
Насчёт инкремента и декремента. 1.Постфиксная форма записи это i++. То есть переменной i сначала возвращается текущее значение, а после уже значение i увеличивается на 1. 2.Префиксная форма записи это ++i, то есть сразу значение i увеличится на 1, и после этого сразу же присвоится переменной i.
ArzamaS
Уровень 14
1 ноября 2023, 20:04
а как работает %= ??? остаток от деления х на у?
mz
Уровень 10
4 ноября 2023, 15:31
Самый простой пример. 5 % 2 = ? 1. Делимое делим на делитель: 5/2, будет 2.5, так стоит помнить что при делении целого числа на целое число остаток отбрасывается в меньшую сторону, получили 2. 2. Наше полученное 2 мы умножаем на делитель, то есть 2. 2*2 = 4. 3. Далее нашу полученную 4 мы отнимаем от делимого. 5 - 4 = 1. Вот и всё: 5 % 2 = 1.