Читать «Java 7 (Наиболее полное руководство)» онлайн - страница 23
Ильдар Шаукатович Хабибуллин
Тип | Разрядность(байт) | Диапазон |
byte | 1 | От -128 до 127 |
short | 2 | От -32 768 до 32 767 |
int | 4 | От -2 147 483 648 до 2 147 483 647 |
long | 8 | От -9 223 372 036 854 775 808 до 9 223 372 036 854 775 807 |
char | 2 | От ’\u0000 ’ до ’ \uFFFF’, в десятичной форме от 0 до 65 535 |
Хотя тип char занимает два байта, в арифметических вычислениях он участвует как тип int, ему выделяется 4 байта, два старших байта заполняются нулями.
Вот примеры определения переменных целых типов:
byte b1 = 50, b2 = -99, b3; short det = 0, ind = 1, sh = ’d’;
int i = -100, j = 100, k = 9999;
long big = 50, veryBig = 2147483648L;
char c1 = 'A', c2 = '?', c3 = 36, newLine = '\n';
Целые типы, кроме char, хранятся в двоичном виде с дополнительным кодом. Последнее означает, что для отрицательных чисел хранится не их двоичное представление, а
Дополнительный код получается так: в двоичном представлении числа все нули меняются на единицы, а единицы на нули, после чего к результату прибавляется единица, разумеется, в двоичной арифметике.
Например, значение 50 переменной b1, определенной ранее, будет храниться в одном байте с содержимым 00110010, а значение -99 переменной b2 — в байте с содержимым, которое вычисляется так: число 99 переводится в двоичную форму, получая 01100011, меняются единицы и нули, получая 10011100, и прибавляется единица, получая окончательно байт с содержимым 10011101.
Смысл всех этих преобразований в том, что сложение числа с его дополнительным кодом в двоичной арифметике даст в результате нуль; старший бит, равный 1, просто теряется, поскольку выходит за разрядную сетку. Это означает, что в такой странной арифметике дополнительный код числа является противоположным к нему числом, числом с обратным знаком. А это, в свою очередь, означает, что вместо того, чтобы вычесть из числа A число B, можно к A прибавить дополнительный код числа B. Таким образом, операция вычитания исключается из набора машинных операций.
Над целыми типами можно производить массу операций. Их набор восходит к языку С, он оказался удобным и кочует из языка в язык почти без изменений. Особенности применения этих операций в языке Java показаны на примерах.
Операции над целыми типами
Все операции, которые производятся над целыми числами, можно разделить на следующие группы.
Арифметические операции
К арифметическим операциям относятся:
□ сложение — + (плюс);
□ вычитание — - (дефис);
□ умножение — * (звездочка);
□ деление — / (наклонная черта, слэш);
□ взятие остатка от деления (деление по модулю) — % (процент);
□ инкремент (увеличение на единицу) — ++;
□ декремент (уменьшение на единицу)---.
Между сдвоенными плюсами и минусами нельзя оставлять пробелы.
Сложение, вычитание и умножение целых значений выполняются как обычно, а вот деление целых значений в результате дает опять целое (так называемое