Учебное пособие: Основные структуры языка Java
Практически всегда в Java используются именно сокращенные логические операции.
Целые типы
Спецификация языка Java, JLS, определяет разрядность (количество байтов, выделяемых для хранения значений типа в оперативной памяти) и диапазон значений каждого типа. Для целых типов они приведены в табл. 2.
Таблица 2. Целые типы
Тип | Разрядность (байт) | Диапазон |
byte | 1 | от -128 до 127 |
short | 2 | от -32768 до 32767 |
int | 4 | от -2147483648 до 2147483647 |
long | 8 | от -9223372036854775808 до 9223372036854775807 |
char | 2 | от '\u0000' до '\uFFFF' , в десятичной форме от 0 до 65535 |
Впрочем, для Java разрядность не столь важна, на некоторых компьютерах она может отличаться от указанной в таблице, а вот диапазон значений должен выдерживаться неукоснительно.
Хотя тип char занимает два байта, в арифметических вычислениях он участвует как тип int, ему выделяется 4 байта, два старших байта заполняются нулями.
Примеры определения переменных целых типов:
byte b1 = 50, b2 = -99, bЗ;
short det = 0, ind = 1;
int i = -100, j = 100, k = 9999;
long big = 50, veryBig = 2147483648L;
char c1 = 'A', c2 = '?', newLine = '\n';
Целые типы хранятся в двоичном виде в дополнительном коде.
Над целыми типами можно производить массу операций. Их набор восходит к языку С, он оказался удобным и кочует из языка в язык почти без изменений.
Операции над целыми типами
Все операции, которые производятся над целыми числами, можно разделить на следующие группы.
Арифметические операции
К арифметическим операциям относятся:
· сложение + (плюс);
· вычитание - (дефис);
· умножение * (звездочка);
· деление / (наклонная черта — слэш);
· взятие остатка от деления (деление по модулю) % (процент);
· инкремент (увеличение на единицу) ++;
· декремент (уменьшение на единицу) --
Между сдвоенными плюсами и минусами нельзя оставлять пробелы. Сложение, вычитание и умножение целых значений выполняются как обычно, а вот деление целых значений в результате дает опять целое (так называемое "целое деление"), например, 5/2 даст в результате 2, а не 2.5, а 5/(-3) даст -1. Дробная часть попросту отбрасывается, происходит усечение частного. Это поначалу обескураживает, но потом оказывается удобным для усечения чисел.
В Java принято целочисленное деление.
Это странное для математики правило естественно для программирования: если оба операнда имеют один и тот же тип, то и результат имеет тот же тип. Достаточно написать 5/2.0 или 5.0/2 или 5.0/2.0 и получим 2.5 как результат деления вещественных чисел.
Операция деление по модулю определяется так: а % b = а - (а / b) * b; например, 5%2 даст в результате 1, а 5% (-3) даст, 2, т.к. 5 = (-3) * (-1) + 2, но (-5)%3 даст -2, поскольку -5 = 3 * (-1) - 2.