Интересно, как хранятся числа. Или они сохраняют, например, число 1 в двоичном виде как 000(31/63 нули)1 или просто 1? И как они узнают, когда это новый номер? Другими словами, как он различает 2 x 1 и 3? И не будет ли 64-битная система стоить больше памяти, если они будут хранить как этот 000(63 нуля)1?
1 ответ
Данные хранятся в единицах байт - номер 1 будет, как минимум, занимает 8 бит: 00000001
и всегда начинаются и заканчиваются на границе байта. Когда процессор обращается к данным в оперативной памяти, он обращается к целому байту, а не к отдельным битам.
«64-битная» метка просто означает, что все адреса памяти имеют длину 4 байта (и, естественно, что процессор имеет инструкции для работы с такими большими числами).
Но это не меняет того, как программы хранят все другие виды данных. Для всего остального программа (то есть ее автор) может выбрать предпочтительный размер, при условии, что это точное количество байтов. Например, в C переменная, объявленная как short
или uint16_t
будет 16 битов, то есть 2 байта. Обычные размеры составляют 8, 16, 32, 64 бита (то есть 1, 2, 4 или 8 байт), поскольку именно для этого были созданы процессоры.
(Конечно, программы могут хранить данные в любой способ , которым они хотят - многие на диске форматы файлов сделать пакет номера в 3 байта или 5 байт или любой другой - но это сложнее работать.)
Чтобы продолжить ваш вопрос, как "система" различает одно 32-разрядное число и, например, два 16-разрядных - ответ заключается в том, что в этом нет необходимости. Все решается, когда программа написана и / или скомпилирована, поэтому результирующие инструкции процессора просто напрямую работают с определенными размерами.
(На самом деле программа обычно интерпретирует одни и те же данные по-разному - например, даже если текст может быть сохранен в виде последовательности 1-байтовых символов, функции, такие как strpos(), используют приемы ускорения, которые основаны на интерпретации одних и тех же данных как серия из 4-байтовых или даже 8-байтовых чисел.)