Двоично-десятичный код
В вычислительных и электронных системах двоично-десятичное число ( BCD ) — это класс двоичного кодирования десятичных чисел, где каждая цифра представлена фиксированным количеством битов , обычно четырьмя или восемью. используются специальные битовые комбинации Иногда для знака или других указаний (например, ошибки или переполнения) .
В байт -ориентированных системах (то есть на большинстве современных компьютеров) термин « распакованный BCD» [1] обычно подразумевает полный байт для каждой цифры (часто включая знак), тогда как упакованный BCD обычно кодирует две цифры в одном байте, используя тот факт, что четырех битов достаточно для представления диапазона от 0 до 9. Точный четырехбитный код однако кодировка может отличаться по техническим причинам (например, Excess-3 ).
Десять состояний, представляющих цифру BCD, иногда называют тетрадами. [2] [3] ( полубайт, который обычно необходим для их хранения, также известен как тетрада), а неиспользуемые состояния безразличия называются псевдо-тетрадами(e)s , [4] [5] [6] [7] [8] псевдодесятичные числа [3] или псевдодесятичные цифры . [9] [10] [номер 1]
Основным достоинством BCD по сравнению с двоичными позиционными системами является более точное представление и округление десятичных величин, а также простота преобразования в обычные удобочитаемые представления. Его основными недостатками являются небольшое увеличение сложности схем, необходимых для реализации базовой арифметики, а также немного меньшая плотность хранения.
BCD использовался во многих ранних десятичных компьютерах и реализован в наборе команд таких машин, как серия IBM System/360 и ее потомки, Digital Equipment Corporation компании VAX , процессоры Burroughs B1700 и Motorola 68000 .
BCD сам по себе не так широко используется, как раньше, и недоступен или ограничен в новых наборах команд (например, ARM ; x86 в длинном режиме ). Однако десятичные форматы с фиксированной запятой и десятичные форматы с плавающей запятой по-прежнему важны и продолжают использоваться в финансовых, коммерческих и промышленных вычислениях, где тонкие ошибки преобразования и дробного округления , присущие двоичным форматам с плавающей запятой. недопустимы [11]
Предыстория [ править ]
BCD использует тот факт, что любое десятичное число может быть представлено четырехбитным шаблоном. Очевидным способом кодирования цифр является Natural BCD (NBCD), где каждая десятичная цифра представлена соответствующим четырехбитным двоичным значением, как показано в следующей таблице. Это также называется кодировкой «8421».
Десятичная цифра | двоично-десятичный код | |||
---|---|---|---|---|
8 | 4 | 2 | 1 | |
0 | 0 | 0 | 0 | 0 |
1 | 0 | 0 | 0 | 1 |
2 | 0 | 0 | 1 | 0 |
3 | 0 | 0 | 1 | 1 |
4 | 0 | 1 | 0 | 0 |
5 | 0 | 1 | 0 | 1 |
6 | 0 | 1 | 1 | 0 |
7 | 0 | 1 | 1 | 1 |
8 | 1 | 0 | 0 | 0 |
9 | 1 | 0 | 0 | 1 |
Эту схему также можно назвать простой двоично-десятичной кодировкой ( SBCD ) или BCD 8421 , и она является наиболее распространенной кодировкой. [12] Другие включают так называемые кодировки «4221» и «7421», названные в честь взвешивания битов, и « Excess-3 ». [13] Например, цифра BCD 6, 0110'b
в обозначении 8421 это 1100'b
в 4221 (возможны две кодировки), 0110'b
в 7421, а в Эксцессе-3 так и есть 1001'b
( ).
Кусочек | Масса | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | Комментарий |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
4 | 8 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | Двоичный |
3 | 4 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | |
2 | 2 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | |
1 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | |
Имя | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | Десятичный | |
8 4 2 1 (XS-0) | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | [14] [15] [16] [17] [номер 2] | |
7 4 2 1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | [18] [19] [20] | |||||||
Айкен (2 4 2 1) | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | [14] [15] [16] [17] [номер 3] | |||||||
Эксцесс-3 (XS-3) | -3 | -2 | -1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | [14] [15] [16] [17] [номер 2] | |
Эксцесс-6 (XS-6) | -6 | -5 | -4 | -3 | -2 | -1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | [18] [номер 2] | |
Прыжок-2 (2 4 2 1) | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | [16] [17] | |||||||
Прыжок-8 (2 4 2 1) | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | [21] [22] [16] [17] [номер 4] | |||||||
4 2 2 1 (Я) | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | [16] [17] | |||||||
4 2 2 1 (II) | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | [21] [22] | |||||||
5 4 2 1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | [18] [14] [16] [17] | |||||||
5 2 2 1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | [14] [16] [17] | |||||||
5 1 2 1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | [19] | |||||||
5 3 1 1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | [16] [17] | |||||||
Белый (5 2 1 1) | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | [23] [18] [14] [16] [17] | |||||||
5 2 1 1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | [24] | |||||||
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | |||
Магнитная лента | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | [15] | |||||||
Пол | 1 | 3 | 2 | 6 | 7 | 5 | 4 | 0 | 8 | 9 | [25] | |||||||
Серый | 0 | 1 | 3 | 2 | 6 | 7 | 5 | 4 | 15 | 14 | 12 | 13 | 8 | 9 | 11 | 10 | [26] [14] [15] [16] [17] [номер 2] | |
Гликсон | 0 | 1 | 3 | 2 | 6 | 7 | 5 | 4 | 9 | 8 | [27] [14] [15] [16] [17] | |||||||
Ледли | 0 | 1 | 3 | 2 | 7 | 6 | 4 | 5 | 8 | 9 | [28] | |||||||
4 3 1 1 | 0 | 1 | 2 | 3 | 5 | 4 | 6 | 7 | 8 | 9 | [19] | |||||||
ЛАРК | 0 | 1 | 2 | 4 | 3 | 5 | 6 | 7 | 9 | 8 | [29] | |||||||
Прозрачный | 0 | 1 | 2 | 4 | 3 | 9 | 8 | 7 | 5 | 6 | [2] [3] | |||||||
Петерик (RAE) | 1 | 3 | 2 | 0 | 4 | 8 | 6 | 7 | 9 | 5 | [30] [31] [номер 5] | |||||||
О'Брайен I (Уоттс) | 0 | 1 | 3 | 2 | 4 | 9 | 8 | 6 | 7 | 5 | [32] [14] [16] [17] [номер 6] | |||||||
5-циклический | 0 | 1 | 3 | 2 | 4 | 5 | 6 | 8 | 7 | 9 | [28] | |||||||
Томпкинс I | 0 | 1 | 3 | 2 | 4 | 9 | 8 | 7 | 5 | 6 | [33] [14] [16] [17] | |||||||
Липпель | 0 | 1 | 2 | 3 | 4 | 9 | 8 | 7 | 6 | 5 | [34] [35] [14] | |||||||
О'Брайен II | 0 | 2 | 1 | 4 | 3 | 9 | 7 | 8 | 5 | 6 | [32] [14] [16] [17] | |||||||
Томпкинс II | 0 | 1 | 4 | 3 | 2 | 7 | 9 | 8 | 5 | 6 | [33] [14] [16] [17] | |||||||
Эксцесс-3 Серый | -3 | -2 | 0 | -1 | 4 | 3 | 1 | 2 | 12 | 11 | 9 | 10 | 5 | 6 | 8 | 7 | [16] [17] [20] [номер 7] [номер 2] | |
6 3 −2 −1 (И) | 3 | 2 | 1 | 0 | 5 | 4 | 8 | 9 | 7 | 6 | [29] [36] | |||||||
6 3 −2 −1 (II) | 0 | 3 | 2 | 1 | 6 | 5 | 4 | 9 | 8 | 7 | [29] [36] | |||||||
8 4 −2 −1 | 0 | 4 | 3 | 2 | 1 | 8 | 7 | 6 | 5 | 9 | [29] | |||||||
Лукаль | 0 | 15 | 14 | 1 | 12 | 3 | 2 | 13 | 8 | 7 | 6 | 9 | 4 | 11 | 10 | 5 | [37] | |
Кауц I | 0 | 2 | 5 | 1 | 3 | 7 | 9 | 8 | 6 | 4 | [18] | |||||||
Кауц II | 9 | 4 | 1 | 3 | 2 | 8 | 6 | 7 | 0 | 5 | [18] [14] | |||||||
Сасскинд I | 0 | 1 | 4 | 3 | 2 | 9 | 8 | 5 | 6 | 7 | [35] | |||||||
Сасскинд II | 0 | 1 | 9 | 8 | 4 | 3 | 2 | 5 | 6 | 7 | [35] | |||||||
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
В следующей таблице представлены десятичные цифры от 0 до 9 в различных системах кодирования BCD. В заголовках " 8 4 2 1
" указывает вес каждого бита. В пятом столбце ("BCD 8 4 -2 -1") два веса отрицательны. Коды символов ASCII и EBCDIC для цифр, которые являются примерами зонального BCD, также являются показано.
цифра |
двоично-десятичный код 8 4 2 1 |
Стибитца Код или Эксцесс-3 | Код Айкена или BCD 2 4 2 1 |
двоично-десятичный код 8 4 −2 −1 |
IBM 702 , IBM 705 , IBM 7080 , IBM 1401 8 4 2 1 |
ASCII-код 0000 8421 |
EBCDIC 0000 8421 |
---|---|---|---|---|---|---|---|
0 | 0000 | 0011 | 0000 | 0000 | 1010 | 0011 0000 | 1111 0000 |
1 | 0001 | 0100 | 0001 | 0111 | 0001 | 0011 0001 | 1111 0001 |
2 | 0010 | 0101 | 0010 | 0110 | 0010 | 0011 0010 | 1111 0010 |
3 | 0011 | 0110 | 0011 | 0101 | 0011 | 0011 0011 | 1111 0011 |
4 | 0100 | 0111 | 0100 | 0100 | 0100 | 0011 0100 | 1111 0100 |
5 | 0101 | 1000 | 1011 | 1011 | 0101 | 0011 0101 | 1111 0101 |
6 | 0110 | 1001 | 1100 | 1010 | 0110 | 0011 0110 | 1111 0110 |
7 | 0111 | 1010 | 1101 | 1001 | 0111 | 0011 0111 | 1111 0111 |
8 | 1000 | 1011 | 1110 | 1000 | 1000 | 0011 1000 | 1111 1000 |
9 | 1001 | 1100 | 1111 | 1111 | 1001 | 0011 1001 | 1111 1001 |
Поскольку большинство компьютеров работают с данными в 8-битных байтах , для кодирования числа BCD можно использовать один из следующих методов:
- В неупакованном виде : каждая десятичная цифра кодируется в один байт, при этом четыре бита представляют число, а остальные биты не имеют значения.
- Упаковано : две десятичные цифры кодируются в один байт, причем одна цифра находится в младшем полубайте ( биты с 0 по 3 ), а другая цифра — в старшем полубайте (биты с 4 по 7). [номер 8]
Например, кодирование десятичного числа 91
использование распакованного BCD приводит к следующему двоичному шаблону из двух байтов:
Decimal: 9 1 Binary : 0000 1001 0000 0001
В упакованном формате BCD одно и то же число умещается в один байт:
Decimal: 9 1 Binary : 1001 0001
Следовательно, числовой диапазон для одного неупакованного байта BCD составляет от нуля до девяти включительно, тогда как диапазон для одного упакованного байта BCD составляет от нуля до девяноста девяти включительно.
Для представления чисел, превышающих диапазон одного байта, может использоваться любое количество смежных байтов. Например, для представления десятичного числа 12345
в упакованном BCD формате с обратным порядком байтов программа будет кодировать следующим образом:
Decimal: 0 1 2 3 4 5 Binary : 0000 0001 0010 0011 0100 0101
Здесь самый старший полубайт самого значимого байта закодирован как ноль, поэтому число сохраняется как 012345
(но процедуры форматирования могут заменить или удалить ведущие нули). Упакованный BCD более эффективен в использовании хранилища, чем распакованный BCD; кодирование того же числа (с ведущим нулем) в распакованном формате потребует вдвое больше памяти.
Операции сдвига и маскировки используются для упаковки или распаковки упакованной цифры BCD. Другие побитовые операции используются для преобразования числа в эквивалентный битовый шаблон или обратного процесса.
Упакованный BCD [ править ]
В упакованном BCD (или упакованном десятичном формате). [38] ), каждый полубайт представляет десятичную цифру. [номер 8] Упакованный BCD используется по крайней мере с 1960-х годов и с тех пор реализован во всем оборудовании мэйнфреймов IBM. Большинство реализаций имеют обратный порядок байтов , т. е. с более старшей цифрой в верхней половине каждого байта, а самый левый байт (находящийся по самому низкому адресу памяти) содержит старшие цифры упакованного десятичного значения. Младший полубайт самого правого байта обычно используется в качестве флага знака, хотя в некоторых беззнаковых представлениях флаг знака отсутствует.
Например, 4-байтовое значение состоит из 8 полубайтов, причем старшие 7 полубайтов хранят цифры 7-значного десятичного значения, а самый низкий полубайт указывает знак десятичного целочисленного значения. Стандартные значения знака: 1100 ( шестнадцатеричный C) для положительного (+) и 1101 (D) для отрицательного (-). Это соглашение исходит из поля зоны для символов EBCDIC и знакового представления дублирования .
Другими разрешенными знаками являются 1010 (A) и 1110 (E) для положительного и 1011 (B) для отрицательного. Процессоры IBM System/360 будут использовать знаки 1010 (A) и 1011 (B), если в PSW установлен бит A для стандарта ASCII-8, который так и не прошел проверку. Большинство реализаций также предоставляют беззнаковые значения BCD со знаком 1111 (F). [39] [40] [41] ILE RPG использует 1111 (F) для положительного и 1101 (D) для отрицательного. [42] Они соответствуют зоне EBCDIC для цифр без наложения знака. В упакованном BCD число 127 представлено 0001 0010 0111 1100 (127C), а -127 представлено 0001 0010 0111 1101 (127D). В системах Берроуза для отрицательного знака используется 1101 (D), а любое другое значение считается положительным (процессоры нормализуют положительный знак до 1100 (C)).
Знак цифра |
двоично-десятичный код 8 4 2 1 |
Знак | Примечания |
---|---|---|---|
А | 1 0 1 0 | + | |
Б | 1 0 1 1 | − | |
С | 1 1 0 0 | + | Предпочтительный |
Д | 1 1 0 1 | − | Предпочтительный |
И | 1 1 1 0 | + | |
Ф | 1 1 1 1 | + | Без подписи |
Независимо от того, сколько байтов имеет ширина слова , число полубайтов всегда четное, поскольку в каждом байте их два. Следовательно, слово из n байтов может содержать до (2 n )−1 десятичных цифр, что всегда является нечетным числом цифр. Десятичное число с d цифрами требует 1/2 +1 d ( . ) байт памяти
Например, 4-байтовое (32-битное) слово может содержать семь десятичных цифр плюс знак и представлять значения в диапазоне ±9 999 999. Таким образом, число −1 234 567 имеет ширину 7 цифр и кодируется как:
0001 0010 0011 0100 0101 0110 0111 1101 1 2 3 4 5 6 7 −
Как и в случае строк символов, первый байт упакованного десятичного числа (с двумя старшими цифрами) обычно хранится по самому младшему адресу в памяти, независимо от порядка байтов машины.
Напротив, 4-байтовое двоичное целое число с дополнением до двух может представлять значения от -2 147 483 648 до +2 147 483 647.
Хотя упакованный BCD не обеспечивает оптимального использования памяти ( используется примерно на 20% больше памяти, чем в двоичной записи для хранения тех же чисел ), преобразование в ASCII , EBCDIC или различные кодировки Unicode становится тривиальным, поскольку никаких арифметических операций не требуется. Дополнительные требования к памяти обычно компенсируются необходимостью точности и совместимости с калькулятором или ручными вычислениями, которые обеспечивает десятичная арифметика с фиксированной запятой. Существуют более плотные упаковки BCD , которые позволяют избежать штрафов за хранение, а также не требуют арифметических операций для обычных преобразований.
Упакованный BCD поддерживается в языке программирования COBOL как тип данных «COMPUTATIONAL-3» (расширение IBM, принятое многими другими поставщиками компиляторов) или «PACKED-DECIMAL» (часть стандарта COBOL 1985 года). он поддерживается В PL/I как «FIXED DECIMAL». Помимо IBM System/360 и более поздних совместимых мэйнфреймов, упакованный BCD реализован в собственном наборе команд исходных процессоров VAX от Digital Equipment Corporation и некоторых моделей мэйнфреймов серии SDS Sigma и является собственным форматом для Burroughs Medium Systems. линейки мэйнфреймов (произошли от серии Electrodata 200 1950-х годов ).
Представления в виде дополнения до десяти для отрицательных чисел предлагают альтернативный подход к кодированию знака упакованных (и других) чисел BCD. В этом случае положительные числа всегда имеют старшую значащую цифру от 0 до 4 (включительно), а отрицательные числа представлены дополнением до десяти соответствующего положительного числа.
В результате эта система позволяет 32-битным упакованным двоично-десятичным числам находиться в диапазоне от -50 000 000 до +49 999 999, а -1 представляется как 99999999. (Как и в случае с двоичными числами с дополнением до двух, диапазон не симметричен относительно нуля.)
Упакованная десятичная дробь с фиксированной запятой [ править ]
Десятичные числа с фиксированной запятой поддерживаются некоторыми языками программирования (например, COBOL и PL/I). Эти языки позволяют программисту указывать неявную десятичную точку перед одной из цифр.
Например, упакованное десятичное значение, закодированное байтами 12 34 56 7C, представляет значение с фиксированной точкой +1234,567, когда подразумеваемая десятичная точка расположена между четвертой и пятой цифрами:
12 34 56 7C 12 34.56 7+
Десятичная точка фактически не сохраняется в памяти, поскольку сжатый формат хранения BCD этого не обеспечивает. Его расположение просто известно компилятору, и сгенерированный код действует соответствующим образом для различных арифметических операций.
Кодировки с более высокой плотностью [ править ]
Если для десятичной цифры требуется четыре бита, то для трех десятичных цифр требуется 12 бит. Однако, поскольку 2 10 (1024) больше 10 3 (1000), если три десятичные цифры закодированы вместе, потребуется только 10 бит. Двумя такими кодировками являются кодировка Чена – Хо и плотно упакованная десятичная дробь (DPD). Последний имеет то преимущество, что подмножества кодировки кодируют две цифры в оптимальных семи битах и одну цифру в четырех битах, как в обычном BCD.
Зонированное десятичное число [ править ]
Некоторые реализации, например IBM мэйнфреймы , поддерживают зонированные десятичные числовые представления. Каждая десятичная цифра хранится в одном байте, причем младшие четыре бита кодируют цифру в формате BCD. Старшим четырем битам, называемым битами «зоны», обычно присваивается фиксированное значение, так что байт содержит символьное значение, соответствующее цифре. В системах EBCDIC используется значение зоны 1111 (шестнадцатеричное F); это дает байты в диапазоне от F0 до F9 (шестнадцатеричный), которые являются кодами EBCDIC для символов от «0» до «9». Аналогичным образом, системы ASCII используют значение зоны 0011 (шестнадцатеричное 3), давая коды символов от 30 до 39 (шестнадцатеричное).
Для зонированных десятичных значений со знаком самый правый (наименее значимый) полубайт зоны содержит знаковую цифру, которая представляет собой тот же набор значений, который используется для упакованных десятичных чисел со знаком (см. выше). Таким образом, зонированное десятичное значение, закодированное в виде шестнадцатеричных байтов F1 F2 D3, представляет десятичное значение со знаком -123:
F1 F2 D3 1 2 −3
Таблица преобразования зональных десятичных чисел EBCDIC [ править ]
двоично-десятичные цифры | Шестнадцатеричный | EBCDIC-символ | ||||||
---|---|---|---|---|---|---|---|---|
0+ | С0 | А0 | E0 | Ф0 | { (*) | \ (*) | 0 | |
1+ | С1 | А1 | Е1 | Ф1 | А | ~ (*) | 1 | |
2+ | С2 | А2 | Е2 | Ф2 | Б | с | С | 2 |
3+ | С3 | А3 | Е3 | F3 | С | т | Т | 3 |
4+ | С4 | A4 | Е4 | F4 | Д | в | В | 4 |
5+ | С5 | А5 | Е5 | F5 | И | v | V | 5 |
6+ | С6 | А6 | Е6 | F6 | Ф | В | В | 6 |
7+ | С7 | A7 | E7 | F7 | Г | х | Х | 7 |
8+ | С8 | А8 | Е8 | F8 | ЧАС | и | И | 8 |
9+ | С9 | А9 | Е9 | F9 | я | С | С | 9 |
0− | Д0 | Б0 | } (*) | ^ (*) | ||||
1− | Д1 | Б1 | Дж | |||||
2− | Д2 | Б2 | К | |||||
3− | Д3 | Б3 | л | |||||
4− | Д4 | Б4 | М | |||||
5− | Д5 | Б5 | Н | |||||
6− | Д6 | Б6 | ТО | |||||
7− | D7 | Б7 | П | |||||
8− | Д8 | Б8 | вопрос | |||||
9− | Д9 | Б9 | Р |
(*) Примечание. Эти символы различаются в зависимости от настроек местной кодовой страницы символов .
Зонированная десятичная дробь с фиксированной запятой [ править ]
Некоторые языки (например, COBOL и PL/I) напрямую поддерживают зонированные десятичные значения с фиксированной запятой, присваивая неявную десятичную точку в некотором месте между десятичными цифрами числа.
Например, для шестибайтового зонированного десятичного значения со знаком и подразумеваемой десятичной точкой справа от четвертой цифры шестнадцатеричные байты F1 F2 F7 F9 F5 C0 представляют значение +1279,50:
F1 F2 F7 F9 F5 C0 1 2 7 9. 5 +0
Операции с BCD [ править ]
Дополнение [ править ]
Можно выполнить сложение , сначала сложив двоичный код, а затем преобразуя его в BCD. Преобразование простой суммы двух цифр можно выполнить путем сложения 6 (то есть 16–10), когда пятибитный результат сложения пары цифр имеет значение больше 9. Причина сложения 6 заключается в том, что существуют 16 возможных 4-битных значений BCD (поскольку 2 4 = 16), но действительны только 10 значений (от 0000 до 1001). Например:
1001 + 1000 = 10001 9 + 8 = 17
10001 — это двоичное, а не десятичное представление желаемого результата, но старшая 1 («перенос») не может уместиться в 4-битном двоичном числе. В BCD, как и в десятичном формате, не может существовать значение, превышающее 9 (1001) на цифру. Чтобы исправить это, к сумме добавляется 6 (0110), а затем результат обрабатывается как два полубайта:
10001 + 0110 = 00010111 => 0001 0111 17 + 6 = 23 1 7
Два полубайта результата, 0001 и 0111, соответствуют цифрам «1» и «7». Это дает «17» в BCD, что является правильным результатом.
Этот метод можно расширить до добавления нескольких цифр путем добавления групп справа налево, распространения второй цифры как переноса, всегда сравнивая 5-битный результат суммы каждой пары цифр с 9. Некоторые процессоры предоставляют флаг полупереноса. для облегчения корректировок арифметики BCD после двоичных операций сложения и вычитания. Intel 8080 , Zilog Z80 и процессоры семейства x86 предоставляют код операции DAA (десятичный корректирующий аккумулятор).
Вычитание [ править ]
Вычитание осуществляется путем прибавления десятичных чисел вычитаемого к вычитаемому . Чтобы представить знак числа в BCD, число 0000 используется для обозначения положительного числа , а 1001 используется для обозначения отрицательного числа . Остальные 14 комбинаций являются недействительными знаками. Чтобы проиллюстрировать вычитание BCD со знаком, рассмотрим следующую задачу: 357 – 432.
В формате BCD число 357 равно 0000 0011 0101 0111. Десятичное число 432 можно получить, взяв девятикратное число 432 и прибавив единицу. Итак, 999–432 = 567 и 567 + 1 = 568. Если перед 568 в BCD поставить отрицательный знак, можно представить число –432. Итак, -432 в формате BCD равно 1001 0101 0110 1000.
Теперь, когда оба числа представлены в формате BCD, их можно сложить:
0000 0011 0101 0111 0 3 5 7 + 1001 0101 0110 1000 9 5 6 8 = 1001 1000 1011 1111 9 8 11 15
Поскольку BCD — это форма десятичного представления, некоторые из приведенных выше сумм цифр недействительны. В случае существования недопустимой записи (любая цифра BCD больше 1001) к ней добавляется 6, чтобы сгенерировать бит переноса и сделать сумму допустимой записью. Таким образом, добавление 6 к недопустимым записям приводит к следующему:
1001 1000 1011 1111 9 8 11 15 + 0000 0000 0110 0110 0 0 6 6 = 1001 1001 0010 0101 9 9 2 5
Таким образом, результат вычитания равен 1001 1001 0010 0101 (-925). Для подтверждения результата обратите внимание, что первая цифра — 9, что означает отрицательный результат. Это кажется правильным, поскольку 357–432 должно давать отрицательное число. Остальные полубайты имеют формат BCD, поэтому 1001 0010 0101 равно 925. Десятичное дополнение 925 равно 1000 − 925 = 75, поэтому вычисленный ответ равен −75.
Если складывается разное количество полубайтов (например, 1053 - 2), перед числом с меньшим количеством цифр необходимо сначала поставить нули, прежде чем выполнять дополнение или вычитание до десяти. Таким образом, при 1053 - 2 сначала нужно будет представить 2 как 0002 в двоично-десятичном формате и вычислить десятичное дополнение 0002.
BCD в компьютерах [ править ]
ИБМ [ править ]
IBM использовала термины «двоично-десятичный код обмена» (BCDIC, иногда просто BCD) для 6-битных буквенно-цифровых кодов, которые представляли числа, буквы в верхнем регистре и специальные символы. Некоторые варианты буквенно-цифровых символов BCDIC используются в большинстве ранних компьютеров IBM, включая IBM 1620 (выпущенный в 1959 году), IBM 1400 серии и недесятичной архитектуры члены серии IBM 700/7000 .
Серия IBM 1400 представляет собой машины с посимвольной адресацией, каждая позиция которых состоит из шести битов, помеченных B, A, 8, 4, 2 и 1, плюс бит проверки нечетности ( C ) и бит словесной метки ( M ). Для кодирования цифр от 1 до 9 равны нулю , B и A а значение цифры представлено стандартным 4-битным BCD в битах с 8 по 1 . Для большинства других символов биты B и A получаются просто из «зонных номеров» «12», «11» и «0» в коде символов перфокарты , а биты с 8 по 1 — из номеров с 1 по 9 . Удар «12 зон» устанавливает как B , так и A , «11 зон» устанавливает B , а «0 зона» (удар 0 в сочетании с любыми другими) устанавливает A . Таким образом, буква A , которая в формате перфокарты равна (12,1) , кодируется (B,A,1) . Символ валюты $ , (11,8,3) на перфокарте был закодирован в памяти как (B,8,2,1) . Это позволяет схеме очень просто конвертировать формат перфокарты в формат внутренней памяти, за исключением нескольких особых случаев. Одним из важных особых случаев является цифра 0 , представленная одиночной цифрой 0 на карте, и (8,2) в основной памяти. [43]
Память IBM 1620 организована в 6-битные адресуемые цифры: обычные 8, 4, 2, 1 плюс F , используемые в качестве бита флага, и C , бит проверки нечетности. BCD Буквенные символы кодируются с использованием пар цифр, при этом «зона» находится в цифре с четным адресом, а «цифра» - в цифре с нечетным адресом, причем «зона» связана с 12 , 11 и 0 «зонными ударами» как в серии 1400. Аппаратное обеспечение преобразования ввода/вывода преобразует внутренние пары цифр во внешние стандартные 6-битные двоично-десятичные коды.
В десятичной архитектуре IBM 7070 , IBM 7072 и IBM 7074 буквенные символы кодируются с использованием пар цифр (с использованием кода «два из пяти в цифрах», а не BCD) 10-значного слова с «зоной» в левая цифра и «цифра» в правой цифре. Аппаратное обеспечение преобразования ввода/вывода преобразует внутренние пары цифр во внешние стандартные 6-битные двоично-десятичные коды.
С выпуском System/360 BCD компания IBM расширила 6-битные буквенные символы до 8-битных EBCDIC, что позволило добавлять гораздо больше символов (например, строчные буквы). тип данных BCD переменной длины упакованный числовой Также реализован , предоставляющий машинные инструкции, которые выполняют арифметические действия непосредственно с упакованными десятичными данными.
На IBM 1130 и 1800 упакованный BCD поддерживается программным обеспечением IBM Commercial Subroutine Package.
Сегодня данные BCD по-прежнему активно используются в базах данных IBM, таких как IBM Db2 , и процессорах, таких как z/Architecture и POWER6 и более поздних процессорах Power ISA . В этих продуктах BCD обычно представляет собой зональное BCD (как в EBCDIC или ASCII), упакованное BCD (две десятичные цифры на байт) или «чистое» кодирование BCD (одна десятичная цифра хранится как BCD в младших четырех битах каждого байта). . Все они используются в аппаратных регистрах и процессорах, а также в программном обеспечении.
Другие компьютеры [ править ]
компании Digital Equipment Corporation Серия VAX включает инструкции , которые могут выполнять арифметические операции непосредственно с упакованными данными BCD и преобразовывать упакованные данные BCD в другие целочисленные представления. [41] Упакованный формат BCD VAX совместим с форматом IBM System/360 и более поздних совместимых процессоров IBM. В MicroVAX и более поздних реализациях VAX эта возможность была исключена из ЦП, но сохранена совместимость кода с более ранними машинами за счет реализации недостающих инструкций в библиотеке программного обеспечения, поставляемой операционной системой. Это вызывается автоматически посредством обработки исключений при обнаружении несуществующих инструкций, так что программы, использующие их, могут выполняться без изменений на новых машинах.
Архитектура Intel x86 поддерживает уникальный 18-значный (десятибайтовый) формат BCD , который можно загружать и сохранять из регистров с плавающей запятой, откуда можно выполнять вычисления. [44]
Серия Motorola 68000 имела инструкции BCD. [45]
В более поздних компьютерах такие возможности почти всегда реализованы в программном обеспечении, а не в наборе инструкций ЦП, но числовые данные в формате BCD по-прежнему чрезвычайно распространены в коммерческих и финансовых приложениях.
Существуют приемы реализации упакованных BCD и зонированных десятичных операций сложения и вычитания с использованием коротких, но трудных для понимания последовательностей параллельной логики и операций двоичной арифметики. [46] Например, следующий код (написанный на C ) вычисляет беззнаковое сложение 8-значных упакованных BCD, используя 32-битные двоичные операции:
uint32_t BCDadd(uint32_t a, uint32_t b)
{
uint32_t t1, t2; // unsigned 32-bit intermediate values
t1 = a + 0x06666666;
t2 = t1 ^ b; // sum without carry propagation
t1 = t1 + b; // provisional sum
t2 = t1 ^ t2; // all the binary carry bits
t2 = ~t2 & 0x11111110; // just the BCD carry bits
t2 = (t2 >> 2) | (t2 >> 3); // correction
return t1 - t2; // corrected BCD sum
}
BCD в электронике [ править ]
В этом разделе есть несколько проблем. Пожалуйста, помогите улучшить его или обсудите эти проблемы на странице обсуждения . ( Узнайте, как и когда удалять эти шаблонные сообщения )
|
BCD распространен в электронных системах, где должно отображаться числовое значение, особенно в системах, состоящих исключительно из цифровой логики и не содержащих микропроцессор. Используя BCD, манипулирование числовыми данными для отображения можно значительно упростить, рассматривая каждую цифру как отдельную подсхему.
Это гораздо лучше соответствует физической реальности аппаратного обеспечения дисплея — например, разработчик может использовать серию отдельных идентичных семисегментных дисплеев для построения схемы измерения. Если бы числовая величина хранилась и обрабатывалась как чисто двоичная, для взаимодействия с таким дисплеем потребовалась бы сложная схема. Следовательно, в тех случаях, когда вычисления относительно просты, работа с BCD может привести к созданию в целом более простой системы, чем преобразование в двоичный формат и из него. Большинство карманных калькуляторов выполняют все расчеты в формате BCD.
Тот же аргумент применим, когда оборудование этого типа использует встроенный микроконтроллер или другой небольшой процессор. Часто внутреннее представление чисел в формате BCD приводит к уменьшению размера кода, поскольку преобразование из или в двоичное представление может быть дорогостоящим на таких ограниченных процессорах. Для этих приложений некоторые небольшие процессоры имеют специальные арифметические режимы, которые помогают при написании процедур, управляющих величинами BCD. [47] [48]
Сравнение с чистым двоичным кодом [ править ]
Преимущества [ править ]
- Масштабировать в 10-й степени просто.
- Округление на границе десятичной цифры проще. Сложение и вычитание в десятичных дробях не требуют округления. [ сомнительно – обсудить ]
- Выравнивание двух десятичных чисел (например, 1,3 + 27,08) представляет собой простой и точный сдвиг.
- Преобразование в символьную форму или для отображения (например, в текстовый формат, такой как XML , или для управления сигналами для семисегментного дисплея ) представляет собой простое поразрядное сопоставление и может выполняться линейным ( O ( n )) время. Преобразование из чистой двоичной системы включает в себя относительно сложную логику, охватывающую цифры, а для больших чисел неизвестен алгоритм преобразования с линейным временем (см. § Преобразование в двоичную систему счисления в другие системы счисления и из них ).
- Многие нецелые значения, такие как десятичное 0,2, имеют бесконечное представление разряда в двоичном формате (.001100110011...), но имеют конечное значение разряда в двоично-десятичном формате (0,0010). Следовательно, система, основанная на двоично-десятичном представлении десятичных дробей, позволяет избежать ошибок при представлении и вычислении таких значений. Это полезно при финансовых расчетах.
Недостатки [ править ]
- Существующие на практике реализации BCD обычно медленнее, чем операции с двоичными представлениями, особенно во встроенных системах, из-за ограниченной поддержки процессором собственных операций BCD. [49]
- Некоторые операции сложнее реализовать. Сумматорам требуется дополнительная логика, чтобы заставить их переносить и генерировать перенос раньше. Кроме того, для сложения BCD требуется на 15–20 процентов больше схем по сравнению с чистым двоичным кодом. [ нужна ссылка ] Умножение требует использования алгоритмов, которые несколько более сложны, чем сдвиг-маска-сложение ( требуется двоичное умножение , требующее двоичных сдвигов и сложений или эквивалентное, для каждой цифры или группы цифр).
- Стандартный BCD требует четыре бита на цифру, что примерно на 20 процентов больше места, чем двоичное кодирование (отношение 4 бита к log 2 10 бит равно 1,204). При упаковке таким образом, что три цифры кодируются в десяти битах, накладные расходы на хранение значительно сокращаются за счет кодирования, которое не соответствует границам 8-битных байтов, обычным для существующего оборудования, что приводит к более медленной реализации в этих системах.
вариации Репрезентативные
Существуют различные реализации BCD, в которых используются другие представления чисел. Программируемые калькуляторы, производимые Texas Instruments , Hewlett-Packard и другими, обычно используют формат BCD с плавающей запятой , обычно с двумя или тремя цифрами для (десятичного) показателя. Дополнительные биты знаковой цифры могут использоваться для обозначения специальных числовых значений, таких как бесконечность , нижнее / переполнение и ошибка (мигающий дисплей).
Подписанные варианты [ править ]
Десятичные значения со знаком могут быть представлены несколькими способами. своему : Например, язык программирования COBOL поддерживает пять зональных десятичных форматов, каждый из которых кодирует числовой знак по-
Тип | Описание | Пример |
---|---|---|
Без подписи | Никаких знаков , откусывания | F1 F2 F3
|
Завершающий знак со знаком (канонический формат) | Знаковый полубайт в последнем (наименее значимом) байте | F1 F2 C3
|
Подписанный ведущий (перепункт) | Знаковый полубайт в первом (самом значимом) байте | C1 F2 F3
|
Подписанный конечный отдельный | Отдельный байт знакового символа ( '+' или '−' ) после цифровых байтов
|
F1 F2 F3 2B
|
Подпись ведущая отдельная | Отдельный байт знакового символа ( '+' или '−' ) перед цифровыми байтами
|
2B F1 F2 F3
|
(TBCD Двоично ) -десятичный код телефонии
3GPP разработал TBCD , [50] расширение до BCD, где оставшиеся (неиспользуемые) битовые комбинации используются для добавления определенных телефонных символов, [51] [52] с цифрами, аналогичными тем, которые встречаются в телефонных клавиатурах оригинального дизайна.
Десятичный цифра |
подлежит уточнению 8 4 2 1 |
---|---|
* | 1 0 1 0 |
# | 1 0 1 1 |
а | 1 1 0 0 |
б | 1 1 0 1 |
с | 1 1 1 0 |
Используется в качестве заполнителя, когда имеется нечетное количество цифр. | 1 1 1 1 |
Упомянутый документ 3GPP определяет TBCD-STRING с переставленными местами полубайтами в каждом байте. Биты, октеты и цифры индексируются с 1, биты справа, цифры и октеты слева.
биты 8765 октета n, кодирующие цифру 2 n
биты 4321 октета n, кодирующие цифру 2( n – 1) + 1
Значение числа 1234
, стал бы 21 43
в TBCD.
Альтернативные кодировки [ править ]
Если ошибки в представлении и вычислениях более важны, чем скорость преобразования в отображение и обратно, можно использовать масштабированное двоичное представление, в котором десятичное число хранится как целое число в двоичном кодировании и десятичный показатель степени со знаком в двоичном кодировании. Например, 0,2 можно представить как 2 × 10. −1 .
Это представление позволяет быстро умножать и делить, но может потребоваться сдвиг в 10-й степени во время сложения и вычитания для выравнивания десятичных точек. Это подходит для приложений с фиксированным количеством десятичных знаков, которые не требуют такой корректировки, особенно для финансовых приложений, где обычно достаточно 2 или 4 цифр после запятой. Действительно, это почти форма арифметики с фиксированной точкой, положение точки счисления поскольку подразумевается .
Кодировки Герца обеспечивают логические преобразования для преобразования групп из трех цифр в и Чена-Хо BCD-кодировке в 10-битные значения и обратно. [номер 1] который может быть эффективно закодирован аппаратно с задержкой всего в 2 или 3 вентиля. Плотно упакованная десятичная дробь (DPD) — аналогичная схема. [номер 1] который используется для большей части мантиссы , за исключением первой цифры, для одной из двух альтернативных десятичных кодировок, указанных в стандарте IEEE 754-2008 с плавающей запятой.
Приложение [ править ]
BIOS чип многих персональных компьютеров хранит дату и время в двоично-десятичном формате, поскольку MC6818 часов реального времени , использованный в исходной материнской плате IBM PC AT, предоставлял время, закодированное в двоично-десятичном формате. Эта форма легко преобразуется в ASCII для отображения. [53] [54]
используют 8-битные компьютеры Atari формат BCD для чисел с плавающей запятой. Процессор MOS Technology 6502 имеет режим BCD для инструкций сложения и вычитания. запятой ; Программное обеспечение карманного компьютера Psion Organizer 1, поставляемое производителем, также использует BCD для реализации операций с плавающей более поздние модели Psion используют исключительно двоичный код.
Ранние модели PlayStation 3 хранят дату и время в формате BCD. Это привело к отключению консоли по всему миру 1 марта 2010 года. Последние две цифры года, сохраненные в формате BCD, были ошибочно интерпретированы как 16, что привело к ошибке в дате устройства, что сделало большинство функций неработоспособными. Эту проблему называют проблемой 2010 года .
Юридическая история [ править ]
В деле 1972 года «Готшалк против Бенсона» Верховный суд США отменил решение суда низшей инстанции , разрешившее патент на преобразование чисел в двоично-десятичном коде в двоичные на компьютере.
В решении отмечалось, что патент «полностью предвосхитит математическую формулу и на практике будет патентом на сам алгоритм ». [55] Это было знаковое решение, определившее патентоспособность программного обеспечения и алгоритмов .
См. также [ править ]
- Двузначное десятичное число
- Троичный двоично-кодированный код (BCT)
- Двоично-цело-десятичное число (BID)
- Битовая маска
- Кодирование Чена – Хо
- Десятичный компьютер
- Плотно упакованная десятичная дробь (DPD)
- Double dabble — алгоритм преобразования двоичных чисел в BCD.
- Проблема 2000 года
Примечания [ править ]
- ↑ Перейти обратно: Перейти обратно: а б с В стандартном упакованном 4-битном представлении имеется 16 состояний (четыре бита на каждую цифру) с 10 тетрадами и 6 псевдотетрадами , тогда как в более плотно упакованных схемах, таких как кодировки Герца , Чена-Хо или DPD, их меньше, например , всего 24 неиспользуемых состояния в 1024 состояниях (10 бит на три цифры).
- ↑ Перейти обратно: Перейти обратно: а б с д и Состояния кода (показаны черным цветом) за пределами десятичного диапазона 0–9 указывают на дополнительные состояния варианта кода, отличного от BCD. В обсуждаемом здесь варианте BCD-кода они являются псевдотетрадами.
- ^ Код Эйкена — один из нескольких кодов 2 4 2 1. Он также известен как код 2* 4 2 1.
- ^ Код Jump-at-8 также известен как несимметричный код 2 4 2 1.
- ^ также Код Петерика известен как код Королевского авиастроительного предприятия (RAE).
- ^ Тип кода О'Брайена I также известен как код Уоттса или отраженный десятичный код Уоттса (WRD).
- ^ Код Грея Excess -3 также известен как код Грея – Стибитца .
- ↑ Перейти обратно: Перейти обратно: а б Подобным образом в машинные слова на миникомпьютерах часто упаковывались несколько символов , см. IBM SQUOZE и DEC RADIX 50 .
Ссылки [ править ]
- ^ Интел. «Руководство по архитектуре ia32» (PDF) . Интел . Архивировано (PDF) из оригинала 9 октября 2022 г. Проверено 1 июля 2015 г.
- ↑ Перейти обратно: Перейти обратно: а б Конечно, Райнер (1 февраля 1970 г.). «1.5.3 Преобразование двоично-десятичных чисел» [1.5.3 Преобразование двоично-десятичных чисел]. Введение – Цифровые компьютеры Коллекция Гёшена (на немецком языке). Том 1241/1241а (1-е изд.). Берлин, Германия: Вальтер де Грюйтер и компания / GJ Göschen'sche Verlagsbuchhandlung . стр. 17, 21. ISBN. 3-11-083160-0 . . Архив-Nr. 7990709. Архивировано из оригинала 18 апреля 2020 г. Проверено 13 апреля 2020 г. (205 страниц) (Примечание. Перепечатка первого издания за 2019 год доступна по адресу ISBN 3-11002793-3 , 978-3-11002793-8 . переработанное и расширенное 4-е издание .) Также существует
- ↑ Перейти обратно: Перейти обратно: а б с Конечно, Райнер (1989) [1988-10-01]. «1.4 Коды: двоично-десятичные числа» [1.4 Коды: двоично-десятичные числа]. компьютеры – Введение в структуру компьютерного оборудования Цифровые . Коллекция Гёшена (на немецком языке). Том 2050 (4-е переработанное изд.). Берлин, Германия: Walter de Gruyter & Co., стр. 25, 28, 38–39. ISBN 3-11011700-2 . п. 25:
[…] Недопустимые шаблоны 0/1 также называются псевдодесятичными числами. […]
(320 страниц) - ^ Шнайдер, Ханс Йохен (1986). Лексикон информатики и обработки данных (на немецком языке) (2-е изд.). Р. Ольденбург Верлаг Мюнхен Вена. ISBN 3-486-22662-2 .
- ^ Тафель, Ханс Йорг (1971). в цифровую Введение обработку информации (на немецком языке). Мюнхен: Карл Хансер Верлаг . ISBN 3-446-10569-7 .
- ^ Штайнбух, Карл В .; Вебер, Вольфганг; Хайнеманн, Трауте, ред. (1974) [1967]. Карманный справочник по информатике - Том II - Структура и программирование компьютерных систем . Обработка сообщений в мягкой обложке (на немецком языке). Том 2 (3-е изд.). Берлин, Германия: Springer Verlag . ISBN 3-540-06241-6 . LCCN 73-80607 .
- ^ Титце, Ульрих; Шенк, Кристоф (6 декабря 2012 г.). Усовершенствованные электронные схемы . Springer Science & Business Media . ISBN 978-3642812415 . 9783642812415 . Проверено 5 августа 2015 г.
- ^ Ковальски, Эмиль (08 марта 2013 г.) [1970]. Ядерная электроника . Спрингер-Верлаг . дои : 10.1007/978-3-642-87663-9 . ISBN 978-3642876639 . 9783642876639, 978-3-642-87664-6 . Проверено 5 августа 2015 г.
- ^ Ферретти, Витторио (13 марта 2013 г.). Словарь по электронике, технологиям передачи данных и телекоммуникациям / Словарь по электронике, вычислительной технике и телекоммуникациям: Часть 1: немецко-английский / Часть 1: немецко-английский . Том 1 (2-е изд.). Издательство Спрингер. ISBN 978-3642980886 . 9783642980886 . Проверено 5 августа 2015 г.
- ^ Шпайзер, Амброзиус Пол (1965) [1961]. Цифровые компьютеры - Основы / Схемы / Эксплуатация / Надежность [ Цифровые компьютеры - Основы / Схемы / Эксплуатация / Надежность ] (на немецком языке) (2-е изд.). ETH Zurich , Цюрих, Швейцария: Springer-Verlag / IBM . п. 209. LCCN 65-14624 . 0978.
- ^ Коулишоу, Майк Ф. (2015) [1981, 2008]. «Общая десятичная арифметика» . Проверено 2 января 2016 г.
- ^ Эванс, Дэвид Сильвестр (март 1961 г.). «Глава четвертая: Вспомогательное оборудование: реле управления выходом и проверки четности для цифровых преобразователей». Цифровые данные: их получение и обработка для анализа и управления процессами (1-е изд.). Лондон, Великобритания: Hilger & Watts Ltd / Interscience Publishers . стр. 46–64 [56–57] . Проверено 24 мая 2020 г. (8+82 страницы) (Примечание. 4-битный BCD-код 8421 с дополнительным битом четности , применяемым в качестве младшего бита для достижения нечетной четности результирующего 5-битного кода, также известен как код Ферранти .)
- ^ Лала, Параг К. (2007). Принципы современного цифрового дизайна . Джон Уайли и сыновья . стр. 20–25. ISBN 978-0-470-07296-7 .
- ↑ Перейти обратно: Перейти обратно: а б с д и ж г час я дж к л м н Бергер, Эрих Р. (1962). «1.3.3. Die Codierung von Zahlen». Написано в Карлсруэ, Германия. В Штайнбухе, Карл В. (ред.). Taschenbuch der Nachrichtenverarbeitung (на немецком языке) (1-е изд.). Берлин / Геттинген / Нью-Йорк: Springer-Verlag OHG . стр. 68–75. LCCN 62-14511 . (Примечание. Показанный код Каутца ( II ), содержащий все восемь доступных двоичных состояний с нечетным счетчиком 1, представляет собой небольшую модификацию исходного кода Каутца ( I ), содержащего все восемь состояний с четным счетчиком 1, так что инверсия старших битов создаст дополнение до девяток .)
- ↑ Перейти обратно: Перейти обратно: а б с д и ж Кеммерер, Вильгельм [на немецком языке] (май 1969 г.). «II.15. Структура: Представление информации в автомате». Написано в Йене, Германия. Во Фрюхауфе, Ганс [на немецком языке] ; Чемберлен, Вильгельм; Шредер, Курц; Винклер, Хельмут (ред.). Цифровые автоматы – теория, структура, технология, программирование . Электронные вычисления и правила (на немецком языке). Том 5 (1-е изд.). Берлин, Германия: Akademie-Verlag GmbH . п. 161. Лицензия № 202-100/416/69. Заказ № 4666 ES 20 K 3. (Примечание: существует также второе издание 1973 г.)
- ↑ Перейти обратно: Перейти обратно: а б с д и ж г час я дж к л м н тот п д Доктор Фолкерт; Штайнхауэр, Юрген (18 июня 1973 г.). Цифровая электроника . Техническая библиотека Philips (PTL) / Macmillan Education (переиздание 1-го изд. на английском языке). Эйндховен, Нидерланды: The Macmillan Press Ltd. / Gloeilampenfabriken Н.В. Филипс . дои : 10.1007/978-1-349-01417-0 . ISBN 978-1-349-01419-4 . СБН 333-13360-9 . Архивировано из оригинала 16 июля 2020 г. Проверено 11 мая 2020 г. (270 страниц) (Примечание. Основано на переводе первого тома двухтомного немецкого издания.)
- ↑ Перейти обратно: Перейти обратно: а б с д и ж г час я дж к л м н тот п д Доктер, Фолкерт; Штайнхауэр, Юрген (1975) [1969]. Цифровая электроника в измерительной технике и обработке данных: Теоретические основы и схемотехника . Специализированные книги Philips (на немецком языке). Том I (улучшенное и расширенное 5-е изд.). Гамбург, Германия: Deutsche Philips GmbH . п. 50. ISBN 3-87145-272-6 . (xii+327+3 страницы) (Примечание. Немецкое издание тома I было опубликовано в 1969, 1971 году, два издания - в 1972 и 1975 годах. Том II был опубликован в 1970, 1972, 1973 и 1975 годах.)
- ↑ Перейти обратно: Перейти обратно: а б с д и ж Каутц, Уильям Х. (июнь 1954 г.). «IV. Примеры А. Двоичные коды десятичных чисел, n = 4». Оптимизированное кодирование данных для цифровых компьютеров . Протокол съезда IRE, Национальный съезд 1954 года, Часть 4 - Электронные компьютеры и теория информации. Сессия 19: Теория информации III – Скорость и вычисления. Стэнфордский исследовательский институт, Стэнфорд, Калифорния, США: IRE, стр. 47–57 [49, 51–52, 57]. Архивировано из оригинала 3 июля 2020 г. Проверено 3 июля 2020 г. п. 52:
[…] Последний столбец [Таблицы II], помеченный как «Наилучший», дает максимально возможную долю для любого кода, а именно 0,60, что вдвое лучше, чем у любого обычного кода. Эта экстремаль достигается с помощью десяти [жёстко отмеченных вершин графа рис. 4 для n = 4, или, фактически, с любым набором из десяти кодовых комбинаций, включающим все восемь с четным (или все восемь с нечетным числом). ) количество «1». Во второй и третьей строках таблицы II указаны среднее и максимальное изменение десятичной дроби на необнаруженную одиночную двоичную ошибку, и они были получены с использованием уравнений разд. II для Δ 1 и δ 1 . Индекс путаницы десятичных дробей по критерию «изменения десятичной дроби» принимается равным c ij = |i − j| i,j = 0, 1, … 9. Опять же, «Наилучшее» возможное расположение (одинаково для среднего и пикового значения), одно из которых показано на рис. 4, существенно лучше, чем традиционные коды. […] Рис. 4. Код минимальной путаницы для десятичных чисел . […] δ 1 =2 Δ 1 =15 […]
[1] [2] [3] [4] [5] [ 6 ] [7] [8] [9] [10] [11] (11 страниц ) (Примечание. Помимо комбинаторного набора 4-битных BCD «кодов с минимальной путаницей для десятичных чисел», из которых автор явно иллюстрирует только один (здесь воспроизведенный как код I ) в виде 4-битного графа, автор также показывает 4-битный «двоичный код для аналоговых данных» с 16 состояниями в форме кодовой таблицы, который, однако, здесь не обсуждается. Показанный здесь код II представляет собой модификацию кода, который я обсуждал Бергером .) - ↑ Перейти обратно: Перейти обратно: а б с Чинал, Жан П. (январь 1973 г.). «Коды». Написано в Париже, Франция. Методы проектирования цифровых систем . Перевод Престона, Алан; Саммер, Артур (1-е изд. на английском языке). Берлин, Германия: Akademie-Verlag / Springer-Verlag . п. 46. дои : 10.1007/978-3-642-86187-1_3 . ISBN 978-0-387-05871-9 . Лицензия № 202-100/542/73. Артикул №7617470(6047) ES 19 B 1/20 K 3 . Проверено 21 июня 2020 г. (xviii+506 страниц) (Примечание. Оригинальная книга на французском языке 1967 года называлась «Техника логических значений и арифметических калькуляторов», опубликованная издательством Éditions Dunod .)
- ↑ Перейти обратно: Перейти обратно: а б Военный справочник: энкодеры — угол вала в цифровом формате (PDF) . Министерство обороны США . 1991-09-30. МИЛ-ХДБК-231А. Архивировано (PDF) из оригинала 25 июля 2020 г. Проверено 25 июля 2020 г. (Примечание. Заменяет MIL-HDBK-231(AS) (01.07.1970).)
- ↑ Перейти обратно: Перейти обратно: а б Стоппер, Герберт (март 1960 г.). Написано в Литцельштеттене, Германия. Рунге, Вильгельм Толме (ред.). «Определение кода и логической схемы счетной декады». Telefunken-Zeitung (TZ) — технические и научные сообщения от Telefunken GMBH (на немецком языке). 33 (127). Берлин, Германия: Telefunken : 13–19. (7 страниц)
- ↑ Перейти обратно: Перейти обратно: а б Боруки, Лоренц; Диттманн, Иоахим (1971) [июль 1970, 1966, осень 1965]. «2.3 Общие коды в цифровой измерительной технике». Написано в Крефельде/Карлсруэ, Германия. Технология цифровых измерений: Введение (на немецком языке) (2-е изд.). Берлин / Гейдельберг, Германия: Springer-Verlag . С. 10–23 [12–14]. дои : 10.1007/978-3-642-80560-8 . ISBN 3-540-05058-2 . LCCN 75-131547 . ISBN 978-3-642-80561-5 . (viii+252 страницы) 1-е издание
- ^ Уайт, Гарланд С. (октябрь 1953 г.). «Кодированные десятичные системы счисления для цифровых компьютеров». Труды Института радиоинженеров . 41 (10). Институт радиоинженеров (ИРЭ): 1450–1452. дои : 10.1109/JRPROC.1953.274330 . eISSN 2162-6634 . ISSN 0096-8390 . S2CID 51674710 . (3 страницы)
- ^ «Различные типы двоичных кодов» . Электронный хаб . 01 мая 2019 г. [28 января 2015 г.]. Раздел 2.4 Кодекса 5211. Архивировано из оригинала 18 мая 2020 г. Проверено 4 августа 2020 г.
- ^ Пол, Матиас Р. (10 августа 1995 г.) [1994]. «Unterbrechungsfreier Schleifencode» [Код непрерывного цикла]. 1.02 (на немецком языке) . Проверено 11 февраля 2008 г. (Примечание. Автор назвал этот код Schleifencode (английский: «контурный код»). Он отличается от кода Грея BCD только кодированием состояния 0, что делает его циклическим кодом единичного расстояния полного круга для применений с вращающимися контактными кольцами . Избегание шаблон кода с нулевым значением позволяет осуществлять самотестирование контура и использовать линии передачи данных для бесперебойного распределения энергии.)
- ^ Грей, Фрэнк (17 марта 1953 г.) [13 ноября 1947 г.]. Импульсно-кодовая связь (PDF) . Нью-Йорк, США: Bell Telephone Laboratories, Incorporated . Патент США 2632058 . Серийный номер 785697. Архивировано (PDF) из оригинала 5 августа 2020 г. Проверено 5 августа 2020 г. (13 страниц)
- ^ Гликсон, Гарри Роберт (март 1957 г.). «Можете ли вы воспользоваться преимуществами циклического двоично-десятичного кода?» . Техника управления . 4 (3). Техническая издательская компания , подразделение издательской корпорации Dun-Donnelley, Dun & Bradstreet Corp .: 87–91. ISSN 0010-8049 . (5 страниц)
- ↑ Перейти обратно: Перейти обратно: а б Ледли, Роберт Стивен ; Ротоло, Луи С.; Уилсон, Джеймс Брюс (1960). «Часть 4. Логическое проектирование схем цифровой вычислительной машины; Глава 15. Последовательные арифметические операции; Глава 15-7. Дополнительные темы». Цифровые компьютеры и техника управления (PDF) . Серия McGraw-Hill по электротехнике и электронике (1-е изд.). Нью-Йорк, США: McGraw-Hill Book Company, Inc. (принтер: The Maple Press Company, Йорк, Пенсильвания, США). стр. 517–518. ISBN 0-07036981-Х . ISSN 2574-7916 . LCCN 59015055 . OCLC 1033638267 . ОЛ 5776493М . СБН 07036981-Х . . ковчег:/13960/t72v3b312. Архивировано (PDF) из оригинала 19 февраля 2021 г. Проверено 19 февраля 2021 г. п. 517:
[…] Циклический код выгоден главным образом при использовании релейных схем, поскольку тогда липкое реле не будет выдавать ложное состояние, поскольку оно задерживается при переходе от одного циклического числа к другому. Есть много других циклических кодов, обладающих этим свойством. […]
[12] (xxiv+835+1 страницы) (NB. Ледли классифицировал описанный циклический код как циклический двоичный код с десятичной кодировкой .) - ↑ Перейти обратно: Перейти обратно: а б с д Савард, Джон Дж. Г. (2018) [2006]. «Десятичные представления» . четырехблок . Архивировано из оригинала 16 июля 2018 г. Проверено 16 июля 2018 г.
- ^ Петерик, Эдвард Джон (октябрь 1953 г.). Циклическая прогрессивная двоично-десятичная система представления чисел (Техническое примечание MS15). Фарнборо, Великобритания: Королевское авиастроительное предприятие (RAE). (4 страницы) (Примечание. Иногда ее называют циклической двоично-десятичной системой представления чисел .)
- ^ Петерик, Эдвард Джон; Хопкинс, Эй Джей (1958). Некоторые недавно разработанные цифровые устройства для кодирования вращения валов (Техническая нота MS21). Фарнборо, Великобритания: Королевское авиастроительное предприятие (RAE).
- ↑ Перейти обратно: Перейти обратно: а б О'Брайен, Джозеф А. (май 1956 г.) [15 ноября 1955 г., 23 июня 1955 г.]. «Циклические десятичные коды для аналого-цифровых преобразователей» . Труды Американского института инженеров-электриков, Часть I: Связь и электроника . 75 (2). Bell Telephone Laboratories, Уиппани, Нью-Джерси, США: 120–122. дои : 10.1109/TCE.1956.6372498 . ISSN 0097-2452 . S2CID 51657314 . Документ 56-21 . Проверено 18 мая 2020 г. (3 страницы) (Примечание. Этот документ был подготовлен для презентации на Зимнем общем собрании AIEE, Нью-Йорк, США, с 30 января 1956 г. по 3 февраля 1956 г.)
- ↑ Перейти обратно: Перейти обратно: а б Томпкинс, Ховард Э. (сентябрь 1956 г.) [16 июля 1956]. «Двоично-десятичные коды единичного расстояния для двухпутевой коммутации» . IRE-транзакции на электронных компьютерах . Переписка. ИС-5 (3). Школа электротехники Мура , Пенсильванский университет , Филадельфия, Пенсильвания, США: 139. doi : 10.1109/TEC.1956.5219934 . ISSN 0367-9950 . Проверено 18 мая 2020 г. (1 страница)
- ^ Липпель, Бернхард (декабрь 1955 г.). «Десятичный код для аналого-цифрового преобразования». IRE-транзакции на электронных компьютерах . ИС-4 (4): 158–159. дои : 10.1109/TEC.1955.5219487 . ISSN 0367-9950 . (2 страницы)
- ↑ Перейти обратно: Перейти обратно: а б с Зюскинд, Альфред Крисс; Уорд, Джон Эрвин (28 марта 1958 г.) [1957, 1956]. «III.F. Коды единичного расстояния / VI.E.2. Отраженные двоичные коды». Написано в Кембридже, Массачусетс, США. В Зюскинде, Альфред Крисс (ред.). Замечания по методам аналого-цифрового преобразования . Книги по технологиям в области науки и техники. Том. 1 (3-е изд.). Нью-Йорк, США: Technology Press Массачусетского технологического института / John Wiley & Sons, Inc. / Chapman & Hall, Ltd., стр. 3-7–3-8 [3-7], 3-10–3-16. [3-13–3-16], 6-65–6-60 [6-60]. (x+416+2 страницы) (Примечание. Содержание книги было первоначально подготовлено сотрудниками Лаборатории сервомеханизмов факультета электротехники Массачусетского технологического института для специальных летних программ, проводившихся в 1956 и 1957 годах. Код Сасскинда фактически представлен в его работа как «код типа чтения» показана здесь как код типа II, тогда как код типа I является второстепенным производным, в котором два наиболее значимых битовых столбца заменены местами, чтобы лучше иллюстрировать симметрию.)
- ↑ Перейти обратно: Перейти обратно: а б Юэн, Чун-Квонг (декабрь 1977 г.). «Новое представление десятичных чисел» . Транзакции IEEE на компьютерах . С-26 (12): 1286–1288. дои : 10.1109/TC.1977.1674792 . S2CID 40879271 . Архивировано из оригинала 08 августа 2020 г. Проверено 8 августа 2020 г.
- ^ Лукал, Гарольд М. (декабрь 1959 г.). «Арифметические операции для цифровых компьютеров с использованием модифицированного отраженного двоичного файла» . IRE-транзакции на электронных компьютерах . ЕС-8 (4): 449–458. дои : 10.1109/TEC.1959.5222057 . ISSN 0367-9950 . S2CID 206673385 . (10 страниц)
- ^ Дьюар, Роберт Берридейл Кейт ; Смосна, Мэтью (1990). Микропроцессоры - взгляд программиста (1-е изд.). Институт Куранта , Нью-Йоркский университет , Нью-Йорк, США: Издательская компания McGraw-Hill . п. 14. ISBN 0-07-016638-2 . LCCN 89-77320 . (xviii+462 страницы)
- ^ «Глава 8: Десятичные инструкции». Принципы работы IBM System/370 . ИБМ . Март 1980 года.
- ^ «Глава 3: Представление данных». Справочник по архитектуре PDP-11 . Корпорация цифрового оборудования . 1983.
- ↑ Перейти обратно: Перейти обратно: а б Справочник по архитектуре VAX-11 . Корпорация цифрового оборудования . 1985.
- ^ «Справочник ИЛЭ по РПГ» .
- ^ Таблица кодов символов IBM BM 1401/1440/1460/1410/7010 в BCD-порядке [ постоянная мертвая ссылка ]
- ^ «4.7 BCD и упакованные целые числа BCD». Руководство разработчика программного обеспечения для архитектур Intel 64 и IA-32, том 1: Базовая архитектура (PDF) . Версия 072. Том. 1. Корпорация Интел . 27 мая 2020 г. [1997]. стр. 3–2, 4–9–4–11 [4–10]. 253665-072США. Архивировано (PDF) из оригинала 6 августа 2020 г. Проверено 6 августа 2020 г. п. 4-10:
[…] При работе с целыми числами BCD в регистрах общего назначения значения BCD могут быть распакованы (одна цифра BCD на байт) или упакованы (две цифры BCD на байт). Значение распакованного целого числа BCD — это двоичное значение младшего полубайта (биты от 0 до 3). Старший полубайт (биты с 4 по 7) может иметь любое значение во время сложения и вычитания, но должен быть равен нулю во время умножения и деления. Упакованные целые числа BCD позволяют содержать две цифры BCD в одном байте. Здесь цифра старшего полубайта более значима, чем цифра младшего полубайта. […] При работе с целыми числами BCD в x87 регистрах данных FPU значения BCD упаковываются в 80-битный формат и называются десятичными целыми числами. В этом формате первые 9 байтов содержат 18 цифр BCD, по 2 цифры на байт. Младшая цифра содержится в нижнем полубайте байта 0, а самая старшая цифра содержится в верхнем полубайте байта 9. Самый старший бит байта 10 содержит знаковый бит (0 = положительный и 1 = отрицательные биты с 0 по 6 байта 10 являются неважными битами). Отрицательные десятичные целые числа не сохраняются в форме дополнения до двух ; они отличаются от положительных десятичных целых чисел только знаковым битом. Диапазон десятичных целых чисел, которые можно закодировать в этом формате, составляет -10. 18 + 1 к 10 18 − 1. Десятичный формат целых чисел существует только в памяти. Когда десятичное целое число загружается в регистр данных x87 FPU, оно автоматически преобразуется в формат с плавающей запятой двойной расширенной точности . Все десятичные целые числа точно представимы в формате двойной повышенной точности. […]
[13] - ^ «Набор инструкций для 68000» (PDF) . Архивировано (PDF) из оригинала 20 ноября 2023 г. Проверено 21 ноября 2023 г. (58 страниц)
- ^ Джонс, Дуглас В. (25 ноября 2015 г.) [1999]. «BCD-арифметика, учебное пособие» . Учебники по арифметике . Айова-Сити, Айова, США: Университет Айовы , факультет компьютерных наук . Проверено 03 января 2016 г.
- ^ Университет Аликанте. «Архитектура на основе Cordic для высокопроизводительных десятичных вычислений» (PDF) . ИИЭЭ . Архивировано (PDF) из оригинала 5 января 2010 г. Проверено 15 августа 2015 г.
- ^ «Вращение десятичных чисел CORDIC на основе выбора путем округления: алгоритм и архитектура» (PDF) . Британское компьютерное общество . Архивировано (PDF) из оригинала 9 октября 2022 г. Проверено 14 августа 2015 г.
- ^ Матур, Адитья П. (1989). Введение в микропроцессоры (3-е изд.). Тата МакГроу-Хилл Паблишинг Компани Лимитед . ISBN 978-0-07-460222-5 .
- ^ 3GPP TS 29.002: Спецификация части мобильного приложения (MAP) (технический отчет). 2013. сек. 17.7.8 Общие типы данных.
- ^ «Руководство по протоколам сигнализации и коммутации (SPS) по использованию абстрактной синтаксической нотации номер один (ASN.1) в протоколах телекоммуникационных приложений» (PDF) . п. 15. Архивировано (PDF) из оригинала 4 декабря 2013 г.
- ^ «Спецификация части мобильного приложения XOM (XMAP)» (PDF) . п. 93. Архивировано из оригинала (PDF) 21 февраля 2015 г. Проверено 27 июня 2013 г.
- ^ «Схемы счетчиков таймера в IBM PC» (PDF) . www.se.ecu.edu.au. Архивировано из оригинала (PDF) 10 октября 2008 г. Проверено 22 мая 2022 г. (7 страниц)
- ^ Техническое описание MC6818
- ^ Gottschalk v. Benson , 409 U.S. 63, 72 (1972).
Дальнейшее чтение [ править ]
- Маккензи, Чарльз Э. (1980). Наборы кодированных символов, история и развитие (PDF) . Серия системного программирования (1-е изд.). издательской компании Addison-Wesley, Inc. ISBN 978-0-201-14460-4 . LCCN 77-90165 . Архивировано (PDF) из оригинала 26 мая 2016 г. Проверено 25 августа 2019 г.
- Ричардс, Ричард Колер (1955). Арифметические операции в цифровых вычислительных машинах . Нью-Йорк, США: ван Ностранд . стр. 397–.
- Шмид, Герман (1974). Десятичные вычисления (1-е изд.). Бингемтон, Нью-Йорк, США: John Wiley & Sons . ISBN 0-471-76180-Х . и Шмид, Герман (1983) [1974]. Десятичные вычисления (1 (переиздание) изд.). Малабар, Флорида, США: Издательская компания Роберта Э. Кригера. ISBN 0-89874-318-4 . (Примечание. По крайней мере, некоторые партии переиздания Кригера содержали опечатки с дефектными страницами 115–146.)
- Массалин, Генри (октябрь 1987 г.). Кац, Рэнди (ред.). «Супероптимизатор: взгляд на самую маленькую программу» (PDF) . Обзор операционных систем ACM Sigops . 21 (4): 122–126. дои : 10.1145/36204.36194 . ISBN 0-8186-0805-6 . Архивировано (PDF) из оригинала 4 июля 2017 г. Проверено 25 апреля 2012 г. (Также: Уведомления ACM SIGPLAN, том 22 № 10, IEEE Computer Society Press № 87CH2440-6, октябрь 1987 г.)
- «Супероптимизатор GNU» . HP-UX .
- Ширази, Бехруз; Юн, Дэвид YY; Чжан, Чанг Н. (март 1988 г.). СБИС спроектирована для избыточного сложения двоично-десятичных чисел . Седьмая ежегодная международная конференция IEEE по компьютерам и коммуникациям в Фениксе, 1988 г. IEEE . стр. 52–56.
- Коричневый; Вранешич (2003). Основы цифровой логики .
- Таплиял, Химаншу; Арабния, Хамид Р. (ноябрь 2006 г.). Модифицированный сумматор BCD с переносом упреждения с CMOS и реверсивной логикой . Материалы Международной конференции по компьютерному дизайну 2006 г. (CDES'06). ЦСРЭА Пресс. стр. 64–69. ISBN 1-60132-009-4 .
- Кайвани, А.; Альхоссейни, А. Закер; Горгин, С.; Фазлали, М. (декабрь 2006 г.). Обратимая реализация преобразователя плотно упакованных десятичных чисел в двоично-десятичный формат и обратно с использованием в IEEE-754R . 9-я Международная конференция по информационным технологиям (ICIT'06). ИИЭЭ . стр. 273–276.
- Коулишоу, Майк Ф. (2009) [2002, 2008]. «Библиография материалов по десятичной арифметике – по категориям» . Общая десятичная арифметика . ИБМ . Проверено 2 января 2016 г.
Внешние ссылки [ править ]
- Коулишоу, Майк Ф. (2014) [2000]. «Краткое описание кодирования десятичных данных Чен-Хо» . Общая десятичная арифметика . ИБМ . Проверено 2 января 2016 г.
- Коулишоу, Майк Ф. (2007) [2000]. «Краткое описание плотно упакованного десятичного кодирования» . Общая десятичная арифметика . ИБМ . Проверено 2 января 2016 г.
- Преобразование BCD в десятичные, двоичные и шестнадцатеричные и наоборот.
- BCD для Java