Русский
Русский
English
Статистика
Реклама

Бинарные операторы в Java

В OTUS скоро стартует новая профессиональная программа по подготовке к сертификации Oracle Java Programmer (OCAJP). Приглашаем вас на бесплатный Demo-урок Типы данных Java: Идентификаторы и примитивы и публикуем статью Владислава Родина руководителя группы разработки, преподавателя в МФТИ и foxminded.

Введение


Сертификация OCA (Oracle Certified Associate Java SE8 Programmer) предлагает ряд необычных заданий, проверяющих глубокое понимание принципов работы языка программирования Java. Целый блок посвящен выражениям, циклам и оператором. Про последние мы сегодня и поговорим.

Приоритет операторов


Оператор принимает на вход аргументы и возвращает некоторые значения. Выделяют унарные, бинарные и тернарные операторы. Например, !false унарный, a + b бинарный, а? : является единственным оператором, принимающим на вход три аргумента.

Первое, что необходимо помнить, это приоритет выполнения операторов:

  1. Пост-унарные операторы: exception++ и exception--
  2. Пре-унарные операторы: ++exception и --exception
  3. Остальные унарные операторы: +, -, !
  4. Умножение, деление, взятие остатка: *, /, %
  5. Сложение и вычитание: +, -
  6. Операторы битового сдвига: <<, >>, >>>
  7. Операторы сравнения: <, >, <=, >=, instanceof
  8. Операторы равенства-неравенства: ==, !=
  9. Логические операторы: &, |, ^
  10. Short-circuit логические операторы: &&, ||
  11. Тернарный оператор: boolean expression? expression1: expres-
    sion2
  12. Операторы присваивания: =, +=, -=, *=, /=, %=, &=, ^=, !=, <<=, >>=, >>>=


Работа с бинарными арифметическими операторами


Начнем с бинарных операторов, они наиболее часто встречаются в Java. На экзамене могут предлагать достаточно сложные выражения для вычисления которых необходимо помнить порядок их выполнения.

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


К арифметическим операторам относятся операторы сложения, вычитания, умножения и взятия остатка. Как я уже сказал, при вычислении необходимо помнить приоритет операторов:

int x = 2 * 5 + 3 * 4 8 = 10 + 12 8 = 14;

Также надо помнить, что приоритет выполнения может изменяться скобками (вначале вычисляется выражение в скобках):

int x = 2 * ((5 + 3) * 4 8) = 2 * (8 * 4 8) = 2 * (32 8) = 2 * 24 = 48;

Новички могут путать операторы целочисленного деления (/) и взятия модуля (%):
System.out.print(9 / 3); // Outputs 3System.out.print(9 % 3); // Outputs 0System.out.print(10 / 3); // Outputs 3System.out.print(10 % 3); // Outputs 1System.out.print(11 / 3); // Outputs 3System.out.print(11 % 3); // Outputs 2System.out.print(12 / 3); // Outputs 4System.out.print(12 % 3); // Outputs 0


Преобразование чисел


Если аргументы бинарного оператора числовые и разные, Java применяет преобразования типов по следующим правилам:

  1. Если два аргумента относятся к разным типам данных, то Java преобразует аргумент менее вместительного типа к аргументу более вместительного типа
  2. Если один аргумент относится к целочисленному типу, а другой к вещественному, то Java преобразует значение целочисленного типа к вещественному типу
  3. Независимо от типов аргументов, Java вначале преобразует менее вместительные целочисленные типы (byte, short, char) к типу int
  4. После приведения аргументов к одному типу, Java вернет результат того же типа, которым обладают аргументы после приведения


Пример 1
Какого типа будет результат выполнения умножения x * y?
int x = 1;long y = 33;


Согласно первому правилу, x будет преобразован к типу long, а затем будет возвращен результат того же типа.

Пример 2
Какого типа будет результат выполнения сложения x + y?
double x = 39.21;float y = 2.1;


Здесь в лучших традициях сертификации нас подстерегает ловушка: 2.1 это double, а 2.1f это float. Попытка записать значение типа double в переменную типа float без явного преобразования приводит к ошибке компиляции в Java.

Пример 3
Какого типа будет результат выполнения сложения x + y?
double x = 39.21;float y = 2.1f;


По аналогии с примером 1, float будет преобразован к double, а затем будет возвращен результат типа double.

Пример 4
Какого типа будет результат выполнения деления x / y?
short x = 10;short y = 3;


Согласно правилу 3 оба аргумента перед выполнением деления будут приведены к int, а потом по правилу 4 будет возвращен int. Ответ вовсе не short!

Пример 5
Какого типа будет результат выполнения операции x * y / z?
short x = 14;float y = 13;double z = 30;


Согласно всем правилам выше вначале x будет преобразован к int'у. Затем выполняется операция умножения x (int) и y (float): x будет преобразован ко float, и результат будет принадлежать типу float. Потом выполняется float / double, поэтому float будет преобразован к double, и будет возвращен double.

Интересно развиваться в данном направлении? Посмотрите программу курса Подготовка к сертификации Oracle Java Programmer (OCAJP)!
Источник: habr.com
К списку статей
Опубликовано: 12.10.2020 10:15:25
0

Сейчас читают

Комментариев (0)
Имя
Электронная почта

Блог компании otus. онлайн-образование

Java

Oracle

Программирование

Промышленное программирование

Certified

Associate

Se

Programmer

Операторы

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru