- •Тема 3. Лексические структуры языка. Примитивные типы данных. Декларация и инициализация переменных. Основные типы операторов.
- •3.1 Примитивные типы данных
- •3.2 Лексические структуры языка
- •3.2.1 Пробелы
- •3.2.2 Идентификаторы
- •3.2.3 Константы
- •3.2.4 Комментарии
- •3.2.5 Разделители
- •3.2.6 Ключевые слова Java
- •4 Операторы
- •4.1 Операция присваивания
- •4.2 Унарные операции
- •4.3 Арифметические бинарные операции
- •4.6 Операции сравнения
- •4.6.1 Логические операции
- •4.7 Условная операция
- •4.8 Приоритет операций
- •4.9 Преобразование и приведение типов при выполнении операций
- •4.10 Переполнение целого числа
- •4.11 Операции с дробными типами
- •4.12 Операция конкатенации строк
- •5 Классы-обертки
- •6 Уловки и ловушки, связанные с плавающей точкой и десятичными числами
- •6.1 Плавающая точка ieee
- •6.2 Специальные числа
- •6.3 Непредвиденные обстоятельства использования плавающей точки
- •6.4 Ошибки округления
- •6.5 Рекомендации по сравнению чисел с плавающей точкой
- •6.6 Не используйте числа с плавающей точкой для точных значений
- •6.7 Большие десятичные дроби для маленьких чисел
- •6.8 Все методы сравнения не созданы равными
- •6.9 Используйте BigDecimal в качестве типа обмена
- •6.10 Построение чисел BigDecimal
4.1 Операция присваивания
Присвоение переменной значения константы, другой переменной или выражения (переменных и/или констант, разделенных знаками операций), называется операцией присваивания и обозначается знаком "=", например:
x = 3; y = x; z = x;
В Java допустимо многократное использование операции присваивания в одном выражении, например:
x1 = x2 = x3 = 0;
Эта операция выполняется справа налево, т.е. сначала переменной x3 присваивается значение 0, затем переменной x2 присваивается значение переменной x3 (0), и, наконец, переменной x1 присваивается значение переменной x2 (0).
4.2 Унарные операции
Знаки операций, аргументами которых являются числа, разделяются на две категории: унарные (unary) знаки операций с одним аргументом и бинарные (binary) с двумя аргументами.
Примеры унарных операций "+" и "-":
int i = 3;
int j = -i; // j = -3
int k = +i; // k = 3
Пример операции побитового дополнения:
int a = 15;
int b = ~a; // b = -16
Числа a и b являются числами типа int, т.е. представляются внутри компьютера как двоичные целые числа со знаком длиной 32 бита, поэтому двоичное представление чисел a и b будет выглядеть следующим образом:
a = 00000000 00000000 00000000 00001111
b = 11111111 11111111 11111111 11110000
Как видно из этого представления, все нулевые биты в числе a изменены на единичные биты в числе b, а единичные биты в a изменены на нулевые биты. Десятичным представлением числа b будет –16.
Знаки операции инкремента и декремента могут размещаться как до, так и после переменной. Эти варианты называются соответственно префиксной и постфиксной записью этих операции. Знак операции в префиксной записи возвращает значение своего операнда после вычисления выражения. При постфиксной записи знак операции сначала возвращает значение своего операнда и только после этого вычисляет инкремент или декремент, например:
int x = 1, y, z;
y = ++x; // y = 2, x = 2
z = x++; // z = 1, x = 3
Следует отметить, что в Java, в отличие от языка C, операции декремента и инкремента могут применяться и к вещественным переменным (типа float и double).
Бинарные знаки операций подразделяются на операции с числовым результатом и операции сравнения, результатом которых является булевское значение.
4.3 Арифметические бинарные операции
Операция % возвращает остаток от деления первого числа на второе, причем результат будет иметь тот же знак, что и делимое, например, результат операции 5%3 будет равен 2, а результат операции (-7)%(-4) будет равен -3. В Java операция может использоваться и для вещественных переменных (типа float или double).
Примеры бинарных арифметических операций:
int x = 7;
int x1 = x +10; // x1 = 17
int x2 = x – 8; // x2 = -1
int x3 = x2 * x; // x3 = -7
int x4 = x / 4; // x4 = 1 (при делении целых чисел дробная часть отбрасывается)
int x5 = x % 4 // x5 = 3 (остаток от деления 7 на 4)
4.4 Побитовые операции
Побитовые операции рассматривают исходные числовые значения как поля битов.
4.4.1 Побитовое И
int x = 112; // x: 00000000 00000000 00000000 01110000
int y = 94; // y: 00000000 00000000 00000000 01011110
int z = x & y; // z = 80: 00000000 00000000 00000000 01010000
4.4.2 Побитовое ИЛИ
int x = 112; // x: 00000000 00000000 00000000 01110000
int y = 94; // y: 00000000 00000000 00000000 01011110
int z =x | y; // z = 126: 00000000 00000000 00000000 01111110
4.4.3 Побитовое исключающее ИЛИ
int x = 112; // x: 00000000 00000000 00000000 01110000
int y = 94; // y: 00000000 00000000 00000000 01011110
int z = x ^ y; // z = 46: 00000000 00000000 00000000 00101110
4.4.4 Сдвиг влево с учетом знака
int x = 31; // x: 00000000 00000000 00000000 00011111
int z = x << 2; // z = 124: 00000000 00000000 00000000 01111100
4.4.5 Сдвиг вправо с учетом знака
int x = -17; // x: 11111111 11111111 11111111 11101111
int z = x >> 2; // z = -5: 11111111 11111111 11111111 11111011
4.4.6 Сдвиг вправо без учета знака
int x = -17; // x: 11111111 11111111 11111111 11101111
int z = x >>> 2; // z = 1073741819 или 00111111 11111111 11111111 11111011
4.5 Комбинированные операции
В Java для бинарных арифметических операций можно использовать комбинированные (составные) знаки операций:
идентификатор операция = выражение
Это эквивалентно следующей операции:
идентификатор = идентификатор операция выражение
Примеры:
1. Выражение x += b означает x = x + b.
2. Выражение x -= b означает x = x - b.
3. Выражение x *= b означает x = x * b.
4. Выражение x /= b означает x = x / b.
5. Выражение x %= b означает x = x % b.
6. Выражение x &= b означает x = x & b.
7. Выражение x |= b означает x = x | b.
8. Выражение x ^= b означает x = x ^ b.
9. Выражение x <<= b означает x = x << b.
10. Выражение x >>= b означает x = x >> b.
11. Выражение x >>>= b означает x = x >>> b.