Я собираюсь рассказать небольшой группе людей о системах нумерации в вычислительной технике, и мне было интересно, сколько битов на цифру есть в десятичной системе, например:
- Шестнадцатеричный (основа 16) - 4 бита
- Восьмеричное (основание 8) - 3 бита
- Бинарный (база 2) - 1 бит
- Десятичное число (основание 10) -?
d
, это охватывает одну десятичную цифру, диапазон0..9
.3*d
биты означают три десятичных знака и позволяют вам представлять целые числа из диапазона0..999
. Целые десять бит (подумайте двоично) дают диапазон0..1023
. 999 довольно близко к 1023, но немного меньше. Таким образом, вы можете ожидать,d
должно быть немного меньше, чем 10/3.Ответы:
То, что вы ищете, это логарифм на основе 2, равный 10, что является иррациональным числом около 3.32192809489 ....
Тот факт, что вы не можете использовать целое число битов для десятичной цифры, является основной причиной того, почему многие дроби, которые легко выразить в десятичной системе (например, 1/5 или 0,2), невозможны (не сложно: действительно невозможно) выразить в двоичном виде. Это важно при оценке ошибок округления в арифметике с плавающей запятой.
источник
Другими словами, какое количество информации содержится в одной цифре в этих системах.
Для базы 2, базы 4, базы 8, базы 16 и других 2 N оснований ответ очевиден, поскольку в базе 2 N каждая цифра может быть выражена ровно N цифрами.
Как вы получаете N с учетом 2 N ? Ну, вы используете логарифм на основе 2, который является обратным к возведению в степень.
Основанные на K логарифмы чисел, не являющиеся степенями K, не являются кардинальными числами. Особенно:
Это число может показаться запутанным, но на самом деле оно имеет некоторое применение. Например, это энтропия одной десятичной цифры.
Для вашего случая, однако, я не думаю, что это значение имеет какое-либо значение. Ответ @ Кристиана хорошо объясняет почему.
источник
На предмет битов:
Мне жаль говорить, что вопрос неверный. Вы не будете использовать биты таким образом. Бит - это двоичная цифра . Вы можете преобразовать десятичное число 10 в двоичное число 1010 (8 + 2), поэтому вам потребуется 4 бита для выражения десятичного значения 10.
Полномочия 2
Вы попали в ловушку, используя двоичные (2), восьмеричные (8) и шестнадцатеричные (16) в качестве примеров, потому что это все степени 2, и, таким образом, вы можете думать о них в терминах битов, в то время как 10 не является степенью 2, так что это просто не очень хорошо работает.
источник
BCD - Binary Coded Decimal использует 4 бита на цифру, так же, как шестнадцатеричный.
https://en.wikipedia.org/wiki/Binary-coded_decimal
источник
Использование битов подразумевает степень 2, поэтому, как уже говорили другие, вы не можете легко собрать 10 бит в байты без потерь. Обычное решение - использовать 4 бита в шестнадцатеричном формате и тратить 6 состояний, представленных как AF. Интересный момент - делать десятичную математику с этим - это не аккуратно и просто.
Полезной идеей преподавания может быть сравнение того, как Микки Маус разработал систему подсчета, поскольку у него всего 4 пальца на руку, что естественно приводит к восьмеричной системе.
источник
Это может быть упрощением, но это зависит от того, какой вопрос вы задаете.
(и ответ в основном восьмеричный или шестнадцатеричный)
Я также не рассматриваю дробные биты как биты, потому что в практическом использовании биты не имеют дробей.
Q1: сколько бит вы можете представить в десятичной цифре ?
A1: Вы можете представить 3 бита информации одной десятичной цифрой:
Наиболее распространенной схемой будет прямой двоичный файл с переносом, где 0 = 8 = 000 и 1 = 9 = 001. Но вы можете использовать любую схему, в которой нет ничего, что говорит о том, что это единственный способ кодировать биты в десятичные цифры.
или
Q2: Сколько бит требуется, чтобы представить десятичную цифру?
A2: Вам нужно как минимум 4 бита для представления всех десятичных цифр. С некоторыми отходами или упаковкой.
Опять же, наиболее распространенной схемой будет прямой двоичный файл с переносом, но вы можете использовать любую другую схему.
источник
В базе 1024 каждый символ составляет 10 битов. Три десятичных знака имеют такое же количество информации, что и одна цифра в базе 1000, что немного меньше 1024. Следовательно, десятичная цифра имеет немного меньше 10/3 бит. Это приближение дает 3.333333 ..., а точное число составляет 3.321928 ...
источник
2 10 = 1 024
10 3 = 1 000
2 20 = 1 048 576
10 6 = 1 000 000
3 цифры в базе от 10 до 999 можно
хранить в 10 битах в базе 2. От 6 цифр в базе от 10 до 999 999 можно хранить в 20 битах в базе 2.
Это была идея килобайта, мегабайта и гигабайта.
источник
Отказ от ответственности - я не теоретик информации, а просто обезьяна кода, которая работает в основном на C и C ++ (и, следовательно, с типами фиксированной ширины), и мой ответ будет с этой конкретной точки зрения.
Он принимает в среднем 3,2 битов для представления одного десятичных цифр - от 0 до 7 может быть представлена в 3 -х битов, в то время как 8 и 9 требуют 4.
(8*3 + 2*4)/10 == 3.2
1 .Это менее полезно, чем кажется. Во-первых, у вас явно не хватает долей. С другой стороны, если вы используете собственные целочисленные типы (т. Е. Не BCD или BigInt), вы не сохраняете значения в виде последовательности десятичных цифр (или их двоичных эквивалентов). 8-битный тип может хранить некоторые значения, которые принимают до 3 десятичных цифр, но вы не можете представить все 3-десятичные цифры в 8 битах - диапазон равен
[0..255]
. Вы не можете представлять значения[256..999]
только в 8 битах.Когда мы говорим о значениях , мы будем использовать десятичную, если приложение ожидает этого (например, приложение цифрового банкинга). Когда мы говорим о битах , мы обычно используем шестнадцатеричный или двоичный код (я почти никогда не использую восьмеричный, поскольку я работаю в системах, которые используют 8-битные байты и 32-битные слова, которые не делятся на 3).
Значения, выраженные в десятичном виде, не отображаются чисто на двоичные последовательности. Возьмите десятичное значение
255
. Двоичные эквиваленты каждой цифры будут010
,101
,101
. Тем не менее, двоичное представление значения255
есть11111111
. Просто нет соответствия между любой из десятичных цифр в значении двоичной последовательности. Но есть прямое соответствие с шестнадцатеричными цифрами -F == 1111
так что значение может быть представлено какFF
в шестнадцатеричном виде.Если вы работаете в системе, где 9-битные байты и 36-битные слова являются нормой, тогда восьмеричное имеет больше смысла, поскольку биты естественно группируются в тройки.
источник
1001001
должно ли быть91
или49
.1001001
отображается в73
(64 + 8 + 1
). Я не интерпретирую это как последовательность двоично-десятичных цифр. Если предполагается, что это BCD, который должен использовать 4 бита на цифру, то мы должны принять начальный0
бит, поэтому так и должно быть49
.3.2
фигура, которую вы получаете, на самом деле нарушает границы теории информацииlog(10)/log(2)
.Если бы я учил этому, я бы сначала объяснил, что означает число (выраженное в виде серии цифр). то есть, справа налево, предполагая основание n, a * n ^ 0 + b * n ^ 1 + c * n ^ 2 ... z * n ^ y.
Затем объясните, что 10 ^ 3 приблизительно равно 2 ^ 10. Это не точно и является причиной в компьютерах, мы часто не знаем, что на самом деле означает 2k (это 2000 или 2048?). Это достаточно хорошо для быстрых приближений. 2 ^ 16 составляет около 2 ^ (16 - 10) * 1000, или 2 ^ 6 (64) * 1000 или 64 000. На самом деле, это 65 536, но если вы не возражаете против того, чтобы быть в процентах, он работает довольно быстро для быстрого приближения.
источник