Основы программирования с Java. Тимур Машнин
Чтение книги онлайн.
Читать онлайн книгу Основы программирования с Java - Тимур Машнин страница 18
При этом может быть потеряна информация, когда десятичная часть отсекается.
Например, при делении 2 на 3 результат должен быть 0.66, но мы получаем 0 из-за отсечения.
Или 3 делим на 2 и получаем 1 вместо 1.5.
Если вы делите double на double, результат будет double, как и ожидалось.
Теперь вопрос, как Java оперирует со смешанными делениями, включающими целые числа и числа с плавающей запятой?
В общем, деление double дает double.
Когда целое делится на double или double делится на целое, результатом будет double.
Это позволяет программе максимально сохранить информацию.
Например, если 2 делится на 3.0, результатом будет 0.6666 вместо 0.
Также, деление 3.0 на 2 даст результат 1.5.
Деление двух double 10.0 и 2.0 даст результат double 5.0.
Когда выражение вычисляется, мы должны определить порядок для выполнения операций, если в выражении больше одного оператора.
Когда мы изучали алгебру, мы узнали, что операции * умножения и / деления выполняются перед операциями + сложения и – вычитания, и такое же правило действует и в Java.
Например, в выражении m*x + b, m умножается на x перед прибавлением b к результату умножения.
Приоритет операторов задает порядок, в котором различные операторы выражения вычисляются.
Здесь показан стандартный порядок, которому следует Java:
( )
* / %
– +
Выражение, заключенное в круглые скобки, вычисляется первым.
Для вложенных скобок внутреннее выражение вычисляется первым.
Операторы * умножения, / деления и % остатка вычисляются вторыми, и, если их несколько, вычисление идет слева направо.
Операторы сложения и вычитания вычисляются после остальных операторов, и, если их несколько, вычисление идет слева направо.
Другая важная вещь в вычислении выражений, это концепция ассоциативности.
Ассоциативность используется для определения порядка, в котором операторы с одинаковым приоритетом вычисляются в выражении.
Правило ассоциации в этом примере, – это вычисление слева направо, и называется левой ассоциативностью.
При этом круглые скобки могут быть вставлены для усиления порядка вычисления.
Вы можете подумать, что все операции должны следовать левой ассоциации.
Однако это не всегда случается в Java, и мы уже видели оператор, который следует правой ассоциации, – это оператор присваивания =.
Вопросы
Задача
Что является результатом каждого из следующих выражений?
Expression X: 3 % 4 – 10 * 5
Expression Y: 5 + 11 / 2 * 2.0
Expression Z: 100 / 0
Варианты:
1.
X: -47
Y: 10.0