Иллюстрированный самоучитель по Java
Целые
типы
Спецификация языка Java, JLS, определяет
разрядность (количество байтов, выделяемых для хранения значений типа в оперативной
памяти) и диапазон значений каждого типа. Для целых типов они приведены в табл.
1.2.
Таблица 1.2.
Целые
типы
|
|
|
|
|
|
|
|
|
|
|
от -2147483648
до 2147483647
|
|
|
от -9223372036854775808
до 9223372036854775807
|
|
|
от
'\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';
Целые типы хранятся в двоичном виде
с дополнительным кодом. Последнее означает, что для отрицательных чисел хранится
не их двоичное представление, а
дополнительный код
этого двоичного представления.
Дополнительный же код получается
так: в двоичном предс?авлении все нули меняются на единицы, а единицы на нули,
после чего к результату прибавляется единица, разумеется, в двоичной арифметике.
Например, значение
50
переменной
b1
, определенной выше, будет храниться
в одном байте с содержимым
00110010
, а значение
-99
переменной
b2
— в байте с содержимым, которое
вычисляем так: число
99
переводим в двоичную форму, получая
01100011
, меняем единицы и нули, получая
10011100
,
и прибавляем единицу, получив окончательно байт с содержимым
10011101
.
Смысл всех этих сложностей в том,
что сложение числа с его дополнительным кодом в двоичной арифметике даст в результате
нуль, старший бит просто теряется. Это означает, что в такой странной арифметике
дополнительный код числа является противоположным к нему числом, числом с обратным
знаком. А это, в свою очередь, означает, что вместо того, чтобы вычесть из числа
А число В, можно к А прибавить дополнительный код числа В. Таким 'образом, операция
вычитания исключается из набора машинных операций.
Над целыми типами можно производить
массу операций. Их набор восходит к языку С, он оказался удобным и кочует из
языка в язык почти без изменений. Особенности применения этих операций в языке
Java показаны на примерах.