тип данных байта Java

В Sun' учебное руководство это говорит приблизительно байт:

байт: тип данных байта является дополнительным целым числом 8-разрядного two со знаком. Это имеет минимальное значение-128 и максимальное значение 127 (включительно). Тип данных байта может быть полезен для сохранения памяти в больших массивах, где сбережения памяти на самом деле имеют значение. Они могут также использоваться вместо интервала, где их пределы помогают разъяснить Ваш код; то, что диапазон переменной ограничен, может служить формой документации.

Как это сохраняет память? Что 2's комплимент?

6
задан rink.attendant.6 12 August 2014 в 19:05
поделиться

3 ответа

Он экономит память, потребляя всего восемь бит памяти, по сравнению с 32 для целых чисел. Размер массивов прямо пропорционален размеру содержащегося в них типа данных; массив целых чисел будет потреблять примерно в четыре раза больше памяти (handwaves), чем массив байт.

Из Википедии:

Система комплементации двоих или двухкомпонентная арифметика - это система, в которой отрицательные числа представленный в виде дополнения абсолютное значение;1 эта система является наиболее распространённый способ представления подписанные целые числа на компьютерах.[2] In такая система, число отрицается (преобразованный из положительного в отрицательный или наоборот) путем вычисления своих двух дополнение. Н-разряд два-комплемента система цифр может представлять каждый целое число в диапазоне -2^(N-1) до +2^(N−1)−1.

10
ответ дан 9 December 2019 в 20:44
поделиться

Другое дело, что в основном по историческим причинам большинство данных разбито на 8-битные байты. Это могло быть любое число, но 8-битные компьютеры были действительно популярны, когда вещи действительно впервые стандартизировались, я полагаю.

Так, например, текст часто хранится с одним 8-битным байтом на букву (в ASCII режиме). Файлы данных часто индексируются с помощью указателей на индексы байтов. Говорят о килобайтах и мегабайтах, а это 1024*8 бит. или 220 * 8 бит.

Байты являются своего рода универсальной единицей вычислений для многих целей. Если вы хотите отредактировать стандартный файл, читаемый другими программами, то вам, скорее всего, придется загрузить его в байт[] и в какой-то момент манипулировать отдельными байтами.

Если бы Sun не включало тип данных байта, написание java-программ, которые работали с данными или текстом из других программ, было бы огромной болью. Вам пришлось бы загружать целые числа, делать сдвиги и операции по изоляции отдельных битов, а также постоянно делить индексы на 4. Это не весело.

Значит, байты были добавлены не для сохранения памяти, а для совместимости.

Поскольку байт может иметь одно из 28 = 256 возможных значений, Sun решили, что они должны обозначать от -128 до 127, а не от 0 до 255, так как они не хотели иметь дело со знаковыми и беззнаковыми числами (все их типы данных являются знаковыми, а Java не имеет беззнакового ключевого слова типа C/C++)

Они использовали дополнение к двум, так как это стандартный способ иметь дело с отрицательными числами.

.
2
ответ дан 9 December 2019 в 20:44
поделиться

Байты сохраняют память за счет того, что ее длина составляет всего один байт, в то время как большинство других широко используемых типов данных имеют длину 4 или 8 байт.

Twos-комплементация является практически универсальным способом кодирования знаковых чисел в двоичном виде. Эта кодировка имеет приятное свойство, которое, увеличивая любое значение, как если бы оно было только двоичным, дает следующее целое значение, даже если значение проходит через ноль. Та же самая схема процессора может вычислять знаковые или неподписанные целые числа.

0
ответ дан 9 December 2019 в 20:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: