[Java, Oracle, Программирование, Промышленное программирование] Бинарные операторы в Java
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
В OTUS скоро стартует новая профессиональная программа по подготовке к сертификации Oracle Java Programmer (OCAJP). Приглашаем вас на бесплатный Demo-урок «Типы данных Java: Идентификаторы и примитивы» и публикуем статью Владислава Родина — руководителя группы разработки, преподавателя в МФТИ и foxminded.
Введение
Сертификация OCA (Oracle Certified Associate Java SE8 Programmer) предлагает ряд необычных заданий, проверяющих глубокое понимание принципов работы языка программирования Java. Целый блок посвящен выражениям, циклам и оператором. Про последние мы сегодня и поговорим.
Приоритет операторов
Оператор принимает на вход аргументы и возвращает некоторые значения. Выделяют унарные, бинарные и тернарные операторы. Например, !false — унарный, a + b — бинарный, а? : — является единственным оператором, принимающим на вход три аргумента.
Первое, что необходимо помнить, это приоритет выполнения операторов:
- Пост-унарные операторы: exception++ и exception--
- Пре-унарные операторы: ++exception и --exception
- Остальные унарные операторы: +, -, !
- Умножение, деление, взятие остатка: *, /, %
- Сложение и вычитание: +, -
- Операторы битового сдвига: <<, >>, >>>
- Операторы сравнения: <, >, <=, >=, instanceof
- Операторы равенства-неравенства: ==, !=
- Логические операторы: &, |, ^
- Short-circuit логические операторы: &&, ||
- Тернарный оператор: boolean expression? expression1: expres-
sion2
- Операторы присваивания: =, +=, -=, *=, /=, %=, &=, ^=, !=, <<=, >>=, >>>=
Работа с бинарными арифметическими операторами
Начнем с бинарных операторов, они наиболее часто встречаются в 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 3
System.out.print(9 % 3); // Outputs 0
System.out.print(10 / 3); // Outputs 3
System.out.print(10 % 3); // Outputs 1
System.out.print(11 / 3); // Outputs 3
System.out.print(11 % 3); // Outputs 2
System.out.print(12 / 3); // Outputs 4
System.out.print(12 % 3); // Outputs 0
Преобразование чисел
Если аргументы бинарного оператора числовые и разные, Java применяет преобразования типов по следующим правилам:
- Если два аргумента относятся к разным типам данных, то Java преобразует аргумент менее вместительного типа к аргументу более вместительного типа
- Если один аргумент относится к целочисленному типу, а другой к вещественному, то Java преобразует значение целочисленного типа к вещественному типу
- Независимо от типов аргументов, Java вначале преобразует менее вместительные целочисленные типы (byte, short, char) к типу int
- После приведения аргументов к одному типу, 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
===========
Похожие новости:
- [Тестирование IT-систем, Программирование, Виртуализация, TDD] Язык тестовых сценариев Testo Lang: простая автоматизация сложных тестов
- [Программирование микроконтроллеров] STM32F3xx + FreeRTOS. Modbus RTU с аппаратным RS485 и CRC без таймеров и семафоров
- [Разработка веб-сайтов, JavaScript, Программирование, VueJS] Создание блога с помощью Nuxt Content(часть первая) (перевод)
- [IT-инфраструктура, Сетевые технологии, Законодательство в IT] РБК: Роскомнадзор просит операторов связи предоставить информацию об использовании Google Global Cache
- [Программирование микроконтроллеров] STM32 и LCD2004A без I2C интерфейса
- [Программирование, Робототехника, Научно-популярное] Конструкторы Fischertechnik плюс одноплатный компьютер BBC Micro:Bit, устройства «для Arduino» и детали 3D принтеров
- [JavaScript, VueJS] Vue 3 Composition API: Ref или Reactive (перевод)
- [Программирование, IT-инфраструктура, Big Data, Профессиональная литература] Написать книгу: стоит ли игра свеч?.. От автора книги «Высоконагруженные приложения» (перевод)
- [Open source, Программирование, C++] Релиз акторного фреймворка rotor v0.09 (c++)
- [C, C++, Программирование, Тестирование IT-систем] Тестирование приложений в условиях нехватки памяти
Теги для поиска: #_java, #_oracle, #_programmirovanie (Программирование), #_promyshlennoe_programmirovanie (Промышленное программирование), #_java, #_oracle, #_certified, #_associate, #_se, #_programmer, #_operatory (операторы), #_blog_kompanii_otus._onlajnobrazovanie (
Блог компании OTUS. Онлайн-образование
), #_java, #_oracle, #_programmirovanie (
Программирование
), #_promyshlennoe_programmirovanie (
Промышленное программирование
)
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 20:18
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
В OTUS скоро стартует новая профессиональная программа по подготовке к сертификации Oracle Java Programmer (OCAJP). Приглашаем вас на бесплатный Demo-урок «Типы данных Java: Идентификаторы и примитивы» и публикуем статью Владислава Родина — руководителя группы разработки, преподавателя в МФТИ и foxminded. Введение Сертификация OCA (Oracle Certified Associate Java SE8 Programmer) предлагает ряд необычных заданий, проверяющих глубокое понимание принципов работы языка программирования Java. Целый блок посвящен выражениям, циклам и оператором. Про последние мы сегодня и поговорим. Приоритет операторов Оператор принимает на вход аргументы и возвращает некоторые значения. Выделяют унарные, бинарные и тернарные операторы. Например, !false — унарный, a + b — бинарный, а? : — является единственным оператором, принимающим на вход три аргумента. Первое, что необходимо помнить, это приоритет выполнения операторов:
Работа с бинарными арифметическими операторами Начнем с бинарных операторов, они наиболее часто встречаются в 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 3
System.out.print(9 % 3); // Outputs 0 System.out.print(10 / 3); // Outputs 3 System.out.print(10 % 3); // Outputs 1 System.out.print(11 / 3); // Outputs 3 System.out.print(11 % 3); // Outputs 2 System.out.print(12 / 3); // Outputs 4 System.out.print(12 % 3); // Outputs 0 Преобразование чисел Если аргументы бинарного оператора числовые и разные, 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 =========== Похожие новости:
Блог компании OTUS. Онлайн-образование ), #_java, #_oracle, #_programmirovanie ( Программирование ), #_promyshlennoe_programmirovanie ( Промышленное программирование ) |
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 20:18
Часовой пояс: UTC + 5