Мое предыдущее понимание состоит в том, что вся информация хранилась в двоичном виде (0 и 1) на жестких дисках и в 8-битных блоках на современных компьютерных жестких дисках. И этот шестнадцатеричный используется для облегчения отображения информации, поэтому люди не обязаны читать длинные блоки битов.
Это на 100% правильно. Шестнадцатеричное - это просто представление данных; нет ничего особенного в природе шестнадцатеричной по сравнению с другими форматами. Это не включает сжатие данных или что-то в этом роде.
Я думаю, что ваш друг имел в виду разницу между представлением чисел в виде символьных строк и представлением чисел в виде чисел .
Для целых чисел без знака - которые представляют собой числа в битах (нули и единицы) от 0 до определенного фиксированного максимального числа - максимальное число, которое может быть представлено N битами, равно 2 ^ N, минус 1, при условии, что вы начать с 0.
Итак, если у вас есть 8 бит (или 1 байт), вы можете представлять каждое число от 0 до 255 без потери информации; Вы можете манипулировать этими восемью битами от 0 до 1, чтобы однозначно представлять каждое число от 0 до 255 включительно. Или от 1 до 256, если вы предпочитаете. Это не важно Компьютеры, как правило, представляют их, начиная с 0, хотя.
Если у вас есть 16 бит (2 байта), вы можете представлять каждое число от 0 до 65535 (это 2 ^ 16 - 1). 32 бита, каждое число от 0 до 4294967295. 64 бита, каждое число от 0 до числа 1,8 с девятнадцатью нулями .
Вы можете знать из алгебры, что 2 ^ N - экспоненциальная функция. Это означает, что, даже несмотря на 64 бита только в восемь раз больше битов, чем 8 бит, он может хранить путь, путь, путь больше данных в том, что 8-раз-больше бит, чем число 255*8
(что только 2040!). 2040 - это очень небольшое число по сравнению с приблизительно 180000000000000000000. И 64 бита могут хранить КАЖДЫЕ числа от 0 до этого максимума.
Одним интересным следствием целых чисел, хранящихся таким образом, является то, что программист должен заранее решить, насколько большим должно быть хранилище, что, в свою очередь, определяет максимальное число, которое может быть представлено данным целым числом. Если вы попытаетесь сохранить число больше, чем может обработать хранилище, вы получите нечто, называемое переполнением . Это происходит, например, если у вас есть 8-битное целое число, которое установлено на 255, и вы просите компьютер добавить 1 к нему. Ну, вы не можете представить 256 внутри целого числа, диапазон которого составляет от 0 до 255! Что обычно происходит, так это «оборачивается» обратно к началу и возвращается к 0.
Там являются программы, которые выполняют математику в режиме, который называется «произвольной точности», которая автоматически изменяет размер их хранения расти все больше и больше в зависимости от того, насколько велики числа обрабатываемых являются; например, если вы умножили 255 на 100000, ответ должен был бы вырасти за пределы 8 бит и более 16 бит, но вписался бы в 32-битное целое число. Если вы введете число или выполнили математическую операцию, которая выдает число, превышающее максимум для 64-разрядного целого числа, ему придется выделить для него еще больше места.
ОДНАКО - если вы представляете числа в виде строки символов, то каждое число будет занимать столько же места, сколько буква в письменной прозе. «ASDF» и «1234» занимают одно и то же место. «OneTwoThreeFourFive» (19 символов) занимает то же пространство, что и «1234567890123456789». Объем требуемого пространства растет линейно с количеством цифр (или букв, или символов, как правило), которые у вас есть. Это потому, что каждый символ может представлять любой из множества символов в наборе символов, а числа - это просто символы в наборе символов. Определенная последовательность нулей и единиц будет производить число «3», другая последовательность будет производить «4»,
Обычно символы хранятся в 8 или 16 битах, но некоторые кодировки символов либо занимают переменное число бит в зависимости от символа (например, UTF-8), либо всегда занимают большее количество бит (например, UCS-32). ,
Если каждый символ занимает 8 битов, «OneTwoThreeFourFive» и «1234567890123456789» оба занимают 152 бита. Но «1234567890123456789» может помещаться в 64-разрядное целое число без знака, которое ... потребляет только 64 бита . Это экономия 88 бит! И мы даже не использовали никаких приемов «сжатия данных», таких как Zip, 7-Zip, RAR и т. Д.