Почему восьмеричное и шестнадцатеричное? Компьютеры используют двоичные числа и десятичные дроби человека


16

Почему мы используем другие базы, которые не являются ни двоичными (для компьютеров), ни десятичными (для людей)?

Компьютеры в конечном итоге представляют их в двоичном формате, и люди настоятельно предпочитают получать их десятичное представление. Почему бы не придерживаться этих двух баз?


Я склонен думать, что нет веской причины использовать гекс или что-то с большим количеством символов для чисел. Более того, я склонен думать, что бинарное повторение может заменить другие обозначения для общего случая в будущем.
Михаил V

@MikhailV Шестнадцатеричное представление является ОЧЕНЬ более кратким, чем двоичное представление. Я бы сказал, что это довольно веская причина, чтобы использовать большее количество глифов, чем, скажем, 2.
Бен Джонс

Ответы:


19

Восьмеричное (основание-8) и шестнадцатеричное (основание-16) числа являются разумным компромиссом между компьютерами, использующими двоичную (основание-2) систему, и десятичной (основание-10) системой, которую использует большинство людей.

Компьютеры плохо разбираются в нескольких символах, поэтому для них подходит база 2 (где у вас всего 2 символа), в то время как более длинные строки, числа с большим количеством цифр, представляют меньшую проблему. Люди очень хороши с несколькими символами, но не так хороши в запоминании длинных строк.

Восьмеричное и шестнадцатеричное используют преимущество человека, заключающееся в том, что они могут работать с большим количеством символов, в то время как он все еще легко конвертируется назад и вперед между двоичными числами, потому что каждая шестнадцатеричная цифра представляет 4 двоичные цифры ( ), а каждая восьмеричная цифра представляет 3 ( 8 = 2 3 ). Я думаю, что hex побеждает восьмеричное, потому что его легко использовать для представления байтов и 16/32/64-битных чисел.16=248=23


8
В качестве примера рассмотрим шестнадцатеричные значения RGB. Легко запомнить, что белый - это #FFFFFF. Труднее вспомнить, что белый - это 16777215 в десятичном виде. Вы хотите удалить красный компонент # EF439A? Вы получаете # 00439A, т.е. вы просто меняете первые две цифры на 0. В десятичной системе вы должны вычесть 15663104. Удачи, помня это.
jmite

3
Чтобы быть точным, цвета в десятичной записи будут использовать тройки, а белый будет (255, 255, 255). Мы объединяем шестнадцатеричные значения только потому, что они всегда состоят из 2 цифр. Мы могли бы сделать то же самое с десятичными числами, используя 0, тогда белые были бы 255255255 вместо 16777215.
Spidey

@ Spidey Точно. Более того, мой мозг может анализировать что-то вроде (127 255 255) намного проще, и я даже могу догадаться, как будет выглядеть цвет, так как я могу видеть пропорцию количества чернил и мне не нужно вычислять это в шестнадцатеричном виде в моей голове.
Михаил V

13

Мы используем их для удобства и краткости.

Hex и Oct - действительно выдающиеся сжатые представления двоичного файла. Hex, в частности, хорошо подходит для сжатых форм адресов памяти. Каждая октавная цифра напрямую отображается в 3 двоичных разряда, а каждая шестнадцатеричная цифра - в 4 двоичных разряда. Это результат того, что основания (8 и 16) имеют степени 2 ( и 2 4 ). Например, я могу записать двоичный код 01101001 в виде шестнадцатеричного числа 69 или, если я добавлю его с начальным нулем в виде окт 151 .23240110100169151

Итак, скажем, вам нужны 64-битные адреса памяти. Вы можете просмотреть все 64 двоичных разряда или сжать их до 16 шестнадцатеричных цифр. Часто вам не нужно сравнивать несколько адресов, чтобы увидеть, совпадают ли они или смежные. Вы бы предпочли посмотреть на 64 бит или 16 цифр?


5
Преимущество Octal состоит в том, что он не добавляет никаких цифровых символов и может быть более практичным в дни 6-битных символов (и распространенных слов, не являющихся степенями двух, например, 12-битный PDP-8, 18-битный PDP- 1 [адресные регистры для CDC 6x00], 36-битный PDP-6, 60-битные регистры с операндами для CDC 6x00). Переход к октетным символам / байтам и степеням двух слов делает шестнадцатеричный код более привлекательным.
Пол А. Клэйтон

"Вы бы предпочли посмотреть на 64 или 16 цифр?" Конечно, я бы посмотрел на сгруппированные биты. Но, конечно же, не в обозначении «01», которое уродливо и ранит мои глаза. И я даже не говорю, насколько сильно гекс вредит моим глазам.
Михаил V

@MikhailV: Что вы подразумеваете под «01»? Вы говорите, что предпочитаете смотреть на биты, но не в «01» нотации - какую нотацию вы бы тогда использовали. Если вы говорите, что гекс ранит ваши глаза, я не могу не думать, что вы могли практиковаться немного больше в десятичной, чем в гекс. (На самом деле я думал, что это был (сольный) секс, который, как говорили, вреден для твоих глаз, но это уже другая история.)
PJTraill

Я предпочитаю это более популярному в настоящее время ответу dtech, потому что он подчеркивает простоту использования, но вы, возможно, указали, что не только более короткие представления, но и большее разнообразие цифр облегчают узнать, где вы находитесь, когда читаете число в шестнадцатеричном или восьмеричное.
PJTraill

@ PaulA.Clayton: хорошие моменты; еще одно преимущество PDP-11 заключалось в том, что, хотя слова (естественная единица операций) были 16 битами, большинство кодов команд естественно делилось на 2-битную операцию и четыре 3-битные группы, представляющие номер регистра и режим адреса, оба из которых имели 8 возможностей, из двух аргументов. Мой любимый: 014747 = MOV - (ПК), - (ПК), который заполняет память собой (если это разрешено).
PJTraill


2

Вступление

Как уже упоминалось в других ответах, могут быть разные обозначения для разных целей и ограничений. Обозначения на самом деле представляют собой кодировку в виде последовательности символов, и мы знаем из изучения алгоритмов и структуры данных, что есть много способов, которыми мы можем кодировать абстрактные понятия, например, список или набор, в зависимости от того, что мы хотим с ним делать , В этом случае это в основном алгоритмическое удобство.

При рассмотрении представления чисел применяется то же самое. Внутри компьютера все является двоичным на самом низком уровне, хотя для некоторых приложений могут использоваться странные представления.

За пределами компьютера мы используем любое понятное человеку представление, в зависимости от удобства человека относительно вида представленной ценности. Двоичное представление часто слишком длинное и неструктурированное, чтобы его можно было легко прочитать и записать, что позволяет заменить его на шестнадцатеричное или восьмеричное. Выбор часто может быть связан с тем, как информация структурирована в двоичном слове, которое не обязательно должно представлять число.

Но, рассматривая только цифры , то есть представление чисел, стоит посмотреть на другие системы представления чисел, чтобы понять, что основными факторами являются: физиология, привычка и удобство.Удобство, конечно, является ведущим фактором, создающим разнообразие, поскольку оно зависит от контекста использования.

Более широкий взгляд

2N системы, в основном двоичные, восьмеричные и шестнадцатеричные.

Суть вопроса, похоже, никоим образом не ограничена компьютерами, а люди использовали и продолжают использовать несколько других систем нумерации. Некоторые из них даже используются в компьютерах, например, при работе с длинными целыми числами (не говоря уже о нецелых числах ).

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

Затем, что касается людей, они используют несколько систем в базе 5, называемых кинарными системами . На самом деле, большинство из этих систем имеют две базы, вторая с двумя или четырьмя, чередующаяся с базовой пятью, что делает их эквивалентными основанию 10 (десятичное) или основанию 20 (восьмое). Угадайте, откуда это приходит :)

Эти двухосновные системы называются биквинарными или квадрикунарными системами. Чистая квина редко используется.

Римская цифра может рассматриваться как бинарная система (которая показывает, как с ними делать арифметику). Китайские и японские счеты используют би-квинари. Quadri-Quinary был использован майя.

Причин для использования системы, вероятно, много. Одна веская причина в том, что это был первый местный проект, и теперь люди привыкли к нему. Например, можно также задаться вопросом, почему англоговорящие люди все еще используют чрезвычайно странную систему нумерации при попытке измерить расстояния. Можно утверждать, что это вопрос нескольких единиц, а не нумерации, но это очень слабое замечание. Числа используются в основном для измерения вещей.

Другими причинами сохранения системы является удобство в данном контексте. Может быть компромисс между количеством различных символов или позиций на счетах и ​​количеством символов, необходимых для формирования достаточно больших чисел. База 2 работает с 2 различными символами, но имеет много случаев, что может быть неудобно для представления материала. Vigesimal base 20 потребует двадцать символов и очень большие таблицы умножения, которые люди не помнят. Но би-квинарная или квадри-кинарная система намного более управляема, особенно для построения счётов. Чистая система семейств, вероятно, была бы еще лучше, но она идет вразрез с привычками и интуицией, основанными на физиологии. И всегда приятно иметь возможность считать пальцами, когда мы не знаем ничего лучше.

Но это еще не все.

Одной из очень старых и очень распространенных систем является система шестидесятых, используемая для измерения времени и углов (но мы знаем, что они связаны через вращение Земли). Он использует основание 60, но не использует 60 символов, поскольку это слишком много. Поэтому он использует другую систему для представления своих синболов (например, десятичную систему).

Круг можно разделить на 6 частей, соответствующих углам 60 градусов, которые проще всего построить с равносторонними треугольниками. Тогда каждый градус составляет 60 минут дуги, каждый делится на 60 секунд.

Согласно википедии

Он возник у древних шумеров в 3-м тысячелетии до нашей эры, был передан древним вавилонянам и до сих пор используется - в измененной форме - для измерения времени, углов и географических координат.

Учитывая происхождение, это была довольно удобная система, в то время как математика едва вступала в детство. Не только угол 60⁰ легко рисовать, но и угол 60 имеет много факторов, так что он позволяет делить на целые числа без остатка.

12×5знак равно60

Но есть и другие способы добраться до 60 лет, например, видно-тройная система вавилонян .

Почему мы до сих пор используем половозрелую систему. Я думаю, что мы просто привыкли к этому, и у нас может быть слишком много конфликтующих вопросов, чтобы изменение было полностью оправданным.

Интересно отметить, что существует большое взаимодействие между системами нумерации и системами единиц. Но этого и следовало ожидать, так как мера играет важную роль для чисел. Это заметно в противопоставлении десятичной и двоичной метрик для объема памяти .


3
Это может быть потому, что заголовок гласит: «Почему шестнадцатеричный, восьмеричный или шестнадцатеричный?»
Fizz

1
@RespawnedFluff Хорошее замечание. Тогда мой опрос может распространиться на вопрос. Я не хотел сказать, что другие ответы неинтересны. Но более широкий взгляд лучше показывает возможные мотивы для различных систем. Это поддерживает некоторые ответы, которые уже даны. В основном мотивация - это привычка и удобство. Но удобство очень сильно зависит от контекста. Дихотомия размера памяти является недавно созданной, и она иллюстрирует это.
Бабу

2
Краткость является добродетелью, этот вопрос не требует прозы из 1000 слов, и в большинстве случаев она не очень актуальна. Вы также не смогли ответить на вопрос.
Dtech

«когда число людей исчисляется тысячами, ... это все еще считается десятичным числом, потому что это степени десяти. Так что можно задаться вопросом, почему восьмеричное или шестнадцатеричное не следует рассматривать просто как вариацию двоичного числа». Потому что тысячи - это просто упущение цифры, обычно 0. Это отличается от base-1000, который будет использовать 1000 различных символов для каждого числа 0-999.
Dtech

1
@dtech Спасибо. Я забыл введение или резюме, которые у меня обычно есть перед моими ответами. И это привело меня к важному вопросу, по-видимому, игнорируемому другими ответами. Не каждое двоичное слово предназначено как цифра. Попытка получить более широкое представление о том, что помогает найти проблемы.
Бабу

-1

Компьютеры понимают двоичные числа, а в двоичном коде веса числа имеют степень 2, поэтому количество цифр для представления числа может быть большим в зависимости от числа.

Скажем, 64 в десятичном виде могут быть представлены 7 битами, тогда как для представления числа 5000 нам требуется 13 бит.

Восьмеричная и шестнадцатеричная системы счисления представляют собой компактный способ представления двоичного числа.


2
Как этот ответ [What advantage is there to using a base different from ten or (a power of) two?]- или как еще вы интерпретируете Why not stick to [bases 2 and 10]??
седобородый
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.