Учебное пособие: Основные структуры языка Java
Интересно, что эти операции 'можно записать и перед переменной: ++i, — j. Разница проявится только в выражениях: при первой формe записи (постфиксной) в выражении участвует старое значение переменной и только потом происходит увеличение или уменьшение ее значения. При второй форме записи (префиксной) сначала изменится переменная и ее новое значение будет участвовать в выражении.
Приведение типов
Результат арифметической операции имеет тип int, кроме того случая, когда один из операндов типа long. В этом случае результат будет типа long.
Перед выполнением арифметической операции всегда происходит повышение типов byte, short, char. Они преобразуются в тип int, а может быть, и в тип long, если другой операнд типа long. Операнд типа int повышается до типа long, если другой операнд типа long. Конечно, числовое значение операнда при этом не меняется.
В таких случаях следует выполнить явное приведение типа. В данном случае это будет сужение типа int до типа short. Оно осуществляется операцией явного приведения, которая записывается перед приводимым значением в виде имени типа в скобках. Определение
shortb1=1, b2=2;
shortk = (short)(b1 + b2);
будет верным.
Если результат целой операции выходит за диапазон своего типа int или long, то автоматически происходит приведение по модулю, равному длине этого диапазона, и вычисления продолжаются, переполнение никак не отмечается.
В языке Java нет целочисленного переполнения.
Операции сравнения
В языке Java шесть обычных операций сравнения целых чисел по величине:
· больше >;
· меньше <;
· больше или равно >=;
· меньше или равно <=;
· равно ==;
· не равно !=.
Для записи сложных сравнений следует привлекать логические операции. Например, в вычислениях часто приходится делать проверки вида а < х < b. В данном случае следует написать выражение (а < х) && (х < b), причем здесь скобки можно опустить, написать просто а < х && х < b.
Вещественные типы
Вещественных типов в Java два: float и double. Они характеризуются разрядностью, диапазоном значений и точностью представления, отвечающим стандарту IEEE 754-1985 с некоторыми изменениями. К обычным вещественным числам добавляются еще три значения.
1. Положительная бесконечность, выражаемая константой POSITIVE_INFINITY и возникающая при переполнении положительного значения, например, в результате операции умножения 3.0*6е307.
2. Отрицательная бесконечность NEGATIVE_INFINITY.
3. "Не число", записываемое константой NaN (Not a Number) и возникающее при делении вещественного числа на нуль или умножении нуля на бесконечность.
Кроме того, стандарт различает положительный и отрицательный нуль, возникающий при делении на бесконечность соответствующего знака, хотя сравнение 0.0 == -0.0 дает true. Операции с бесконечностями выполняются по обычным математическим правилам.
Во всем остальном вещественные типы — это обычные, вещественные значения, к которым применимы все арифметические операции и сравнения, перечисленные для целых типов. Характеристики вещественных типов приведены в табл. 1.4.
В языке Java взятие остатка от деления %, инкремент ++ и декремент — применяются и к вещественным типам.
Таблица 3 . Вещественные типы
Тип | Разрядность | Диапазон | Точность |
float | 4 | 3,4е-38 < |х| < 3,4е38 | 7—8 цифр |
double | 8 | 1,7е-308<|х|<1,7е308 | 17 цифр |
Поскольку к вещественным типам применимы все арифметические операции и сравнения, целые и вещественные значения можно смешивать в операциях. При этом правило приведения типов дополняется такими условиями: