То, как компьютеры хранят цифры, можно сравнить с одометром в автомобиле. Если одометр состоит из 4 цифр, он сохраняет номер 33 как «0033».
Если кто-то спросит , какой у вас пробег, вы не скажете "ноль тысяч ноль сто тридцать три". По умолчанию Java тоже нет. (Хотя вы можете сказать это.)
Тогда не будет ли хранить маленькое число в большом битовом пространстве много битов?
Ну, не совсем. Предположим, у вас где-то в памяти было 11000100. Как компьютер должен знать, означает ли это 11000100, или 11000, затем 100, или 1, затем 1000, затем 100 и т. Д.
На самом деле, компьютер просто следует той программе, которую ему дают (помните, что программа на Java создается частично вами, а частично людьми, которые разрабатывают Java). Если вы можете создать жизнеспособную систему для сохранения битов, вы можете заставить компьютер делать это.
Однако имейте в виду, что существует компромисс с точки зрения использования процессора и сложности программирования. Поскольку обычный компьютер может работать с байтами намного быстрее, чем, например, с 7-битными или переменными битами, хранение кодов ASCII в байтах является очень распространенным выбором для хранения текста.
Но позвольте мне вернуться к вашему вопросу.
Тогда не будет ли хранение небольшого числа в большом битовом пространстве много битов?
Математически говоря, нет. Раздел математики под названием Теория информации говорит нам, что количество абсолютно необходимых битов зависит от возможностей, которые вы хотите кодировать, и от того, насколько вероятен каждый из них.
Предположим, у вас есть только четырехбуквенный алфавит (A, B, C, D) и вы используете его для представления двухбитных чисел (соответственно 00, 01, 10, 11). Если каждая из этих букв одинаково вероятна, то минимальное количество бит, необходимое для каждой буквы (в среднем), равно 2. Другими словами, есть нет потраченных впустую бит, даже если A равно 00, а B равно 01.
С другой стороны, если вы используете ASCII и кодируете A, B, C, D в качестве следующих 7-битных чисел:
A: 1000001
B: 1000010
C: 1000011
D: 1000100
тогда вы «тратите» 5 бит на букву (даже если вы не «храните маленькие цифры в большом битовом пространстве»).
Подобные соображения важны при разработке алгоритмов сжатия и не так важны для повседневных приложений. Конечно, важно понимать биты и байты, если вы хотите выучить C.