Почему адреса памяти представлены шестнадцатеричными числами?

Всякий раз, когда я вижу программы на С, которые относятся непосредственно к определенному месту в памяти (например, к барьеру памяти), это делается с шестнадцатеричными числами, также в окнах, когда вы получаете segfualt, это означает, что память разделяется шестнадцатеричным числом.
Например: *(0x12DF)
Мне интересно, почему адреса памяти представлены с использованием шестнадцатеричных чисел?
Есть ли для этого особая причина или это просто соглашение?

Ответ 1

Память часто обрабатывается с точки зрения больших единиц, таких как страницы или сегменты, которые имеют размеры, равные 2. Таким образом, если адреса выражены в шестнадцатеричном виде, это гораздо проще читать их как страницы + смещение или подобные конструкции. Десятичное число сложно, потому что от этого досадного фактора 5, а двоичные адреса слишком велики, чтобы их можно было легко читать.

Ответ 2

Его гораздо более короткий способ представить то, что в противном случае было бы записано в двоичном формате. Также очень удобно и легко конвертировать hex в двоичный и обратно. Каждые 4 цифры двоичного файла соответствуют одной цифре гекса.

Ответ 3

Конвенция и удобство: hex показывает более четко, какие отношения должны иметь разные указатели для сегментации. (Например, разделяемые библиотеки обычно загружаются с четными шестнадцатеричными границами, а сегмент данных также находится на четной границе.) Соглашение о миникомпьютере DEC фактически предпочтительнее восьмеричного, но предпочтение IBM hex преимущество выиграло на практике.

(Для чего это важно: что легче запомнить, 0xb73eb000 или 3074338816? Это адрес одного из общих объектов в моей текущей оболочке на jinx.)

Ответ 4

Это самый короткий, общий формат номера, поэтому числа не занимают много места, и все знают, что они означают.

Ответ 5

Компьютер понимает только двоичный язык, который является набором 0 и 1. Это означает ВКЛ/ВЫКЛ. Как и в случае удобочитаемости человека, двоичное число, которое может представлять собой какой-либо адрес или данные, должно быть преобразовано в читаемый человеком формат. Шестнадцатеричный является одним из них. Но вопрос может быть в том, почему мы преобразовали двоичный код в HEX только почему не десятичный, восьмеричный и т.д. Ответ - это HEX, который может быть легко преобразован с наименьшим количеством накладных расходов как на HW, так и на SW. поэтому мы используем адреса как HEX. Но внутренне они используются только как двоичные.

Надеюсь, это поможет:)

Ответ 6

Технологии продолжают меняться со временем... и они могут меняться. Например, в Turbo С++, int size равен 2 и в Borland, его 4 поэтому распределение памяти для разных типов данных (которое может меняться), максимальный диапазон (шестнадцатеричный - база 16) предоставляется.. так что вам не нужно обновлять ОЗУ для новых предстоящих программ.:)