29

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

  • Шестнадцатеричный (основа 16) - 4 бита
  • Восьмеричное (основание 8) - 3 бита
  • Двоичный (база 2) - 1 бит
  • Десятичное число (основание 10) -?

10 ответов10

98

То, что вы ищете, это логарифм на основе 2, равный 10, что является иррациональным числом около 3.32192809489 ....

Тот факт, что вы не можете использовать целое число битов для десятичной цифры, является основной причиной того, почему многие дроби, которые легко выразить в десятичной системе (например, 1/5 или 0,2), невозможны (не сложно: действительно невозможно) выразить в двоичном виде. Это важно при оценке ошибок округления в арифметике с плавающей запятой.

21

Другими словами, какое количество информации содержится в одной цифре в этих системах.

Для базы 2, базы 4, базы 8, базы 16 и других 2 N оснований ответ очевиден, поскольку в базе 2 N каждая цифра может быть выражена ровно N цифрами.

Как вы получаете N с учетом 2 N? Ну, вы используете логарифм на основе 2, который является обратным к возведению в степень.

  • log 2 2 = 1 (1 бит на цифру в базе 2)
  • log 2 4 = 2 (2 бита на цифру в базе 4)
  • log 2 8 = 3 (3 бита на цифру в базе 8)
  • log 2 16 = 4 (4 бита на цифру в базе 16)

Основанные на K логарифмы чисел, не являющиеся степенями K, не являются кардинальными числами. Особенно:

  • log 2 10 = 3.321928094887362347870319429489390175864831393024580612054…

Это число может показаться запутанным, но на самом деле оно имеет некоторое применение. Например, это энтропия одной десятичной цифры.

Для вашего случая, однако, я не думаю, что это значение имеет какое-либо значение. Ответ @ Кристиана хорошо объясняет почему.

8

На предмет битов:

Мне жаль говорить, что вопрос неверный. Вы не будете использовать биты таким образом. Бит - это двоичная цифра. Вы можете преобразовать десятичное число 10 в двоичное число 1010 (8+2), поэтому вам потребуется 4 бита для выражения десятичного значения 10.


Полномочия 2

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

7

BCD - Binary Coded Decimal использует 4 бита на цифру, так же, как шестнадцатеричный.

https://en.wikipedia.org/wiki/Binary-coded_decimal

3

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

Я также не рассматриваю дробные биты как биты, потому что в практическом использовании биты не имеют дробей.

Q1: сколько бит вы можете представить в десятичной цифре?

A1: Вы можете представить 3 бита информации одной десятичной цифрой:

Наиболее распространенной схемой будет прямой двоичный файл с переносом, где 0 = 8 = 000 и 1 = 9 = 001. Но вы можете использовать любую схему, в которой нет ничего, что говорит о том, что это единственный способ кодировать биты в десятичные цифры.

  • 0: 000
  • 1: 001
  • 2: 010
  • 3: 011
  • 4: 100
  • 5: 101
  • 6: 110
  • 7: 111
  • 8: 000 <- упаковка (или неиспользованная)
  • 9: 001 <- упаковка (или неиспользованная)

или же

Q2: Сколько бит требуется, чтобы представить десятичную цифру?

A2: Вам нужно как минимум 4 бита для представления всех десятичных цифр. С некоторыми отходами или упаковкой.

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

  • 0: 0000
  • 1: 0001
  • 2: 0010
  • 3: 0011
  • 4: 0100
  • 5: 0101
  • 6: 0110
  • 7: 0111
  • 8: 1000
  • 9: 1001
  • 0: 1010 <- упаковка (или неиспользованная)
  • 1: 1011 <- упаковка (или неиспользованная)
  • 2: 1100 <- упаковка (или неиспользованная)
  • 3: 1101 <- упаковка (или неиспользованная)
  • 4: 1110 <- упаковка (или неиспользованная)
  • 5: 1111 <- упаковка (или неиспользованная)
3

Использование битов подразумевает степень 2, поэтому, как уже говорили другие, вы не можете легко собрать 10 бит в байты без потерь. Общее решение состоит в том, чтобы использовать 4 бита в шестнадцатеричном формате и тратить 6 состояний, представленных как AF. С этим интересно работать с десятичной математикой - это не просто и не аккуратно.

Полезной идеей преподавания может быть сравнение того, как Микки Маус разработал систему подсчета, поскольку у него всего 4 пальца на руку, что естественно приводит к восьмеричной системе.

2

В базе 1024 каждый символ составляет 10 битов. Три десятичных знака имеют такое же количество информации, что и одна цифра в базе 1000, что немного меньше 1024. Следовательно, десятичная цифра имеет чуть меньше 10/3 битов. Это приближение дает 3.333333 ..., а точное число составляет 3.321928 ...

2
  • Шестнадцатеричный (основа 16) - 4 бита
  • Восьмеричное (основание 8) - 3 бита
  • Двоичный (база 2) - 1 бит
  • Десятичное число (основание 10) - 3 1/3 бита.
    2 10 = 1024
    10 3 = 1000
    2 20 = 1 048 576
    10 6 = 1 000 000
    3 цифры в базе от 10 до 999 можно хранить в 10 битах в базе 2.
    От 6 цифр в базе 10 до 999 999 можно хранить в 20 битах в базе 2.
    Это была идея о килобайтах, мегабайтах и гигабайтах.
0

Отказ от ответственности - я не теоретик информации, а просто обезьяна кода, которая работает в основном на 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-битные слова являются нормой, тогда восьмеричный смысл имеет больше смысла, поскольку биты естественно группируются в тройки.


  1. На самом деле среднее значение на цифру меньше, поскольку для 0 и 1 требуется только один бит, а для 2 и 3 требуется только 2 бита. Но на практике мы считаем, что от 0 до 7 занимают 3 бита. Просто облегчает жизнь во многих отношениях.

0

Если бы я учил этому, я бы сначала объяснил, что означает число (выраженное в виде серии цифр). то есть справа налево, предполагая, что база 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, но если вы не возражаете против того, чтобы быть в процентах, он работает довольно быстро для быстрого приближения.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .