Код Айкена
Код Айкена — это система счисления с основанием 2, но использующая нестандартное кодирование десятичных цифр, при котором каждой десятичной цифре (от 0 до 9) ставится в соответствие четырёхбитный двоичный код. В отличие от прямого двоичного кода (BCD) или кода с избытком 3, код Айкена является самодополняющимся: инвертирование всех битов кода даёт код цифры, дополняющей исходную до 9. Код назван в честь американского инженера Говарда Айкена, создателя первых электромеханических компьютеров серии Harvard Mark.
История
Код Айкена был разработан в конце 1930-х — начале 1940-х годов в ходе работы над компьютером Harvard Mark I (ASCC — Automatic Sequence Controlled Calculator). Говард Айкен, профессор Гарвардского университета, предложил использовать этот код для представления десятичных чисел в машине, оперировавшей десятичной арифметикой. Основной целью было упрощение схемы вычитания: благодаря свойству самодополняемости операция вычитания могла быть реализована как сложение с инвертированным кодом вычитаемого, что уменьшало количество логических элементов.
Впоследствии код применялся в ряде ранних вычислительных машин, включая IBM 650 (первый серийно выпускавшийся компьютер, 1953 год) и IBM 1401 (1959 год), где использовался для внутреннего представления цифр в десятичной арифметике. С распространением двоичной арифметики и стандартизации кодировок (ASCII, EBCDIC) код Айкена утратил практическое значение, но сохраняет интерес в учебных курсах по цифровой схемотехнике и истории вычислительной техники.
Принцип кодирования
Код Айкена (также известный как код 2-4-2-1) относится к классу взвешенных кодов: каждому биту в четырёхбитной группе приписан определённый вес. В отличие от прямого двоичного кода (веса 8-4-2-1), в коде Айкена используются веса 2-4-2-1. Это означает, что значение цифры вычисляется по формуле:
\[ \text{Цифра} = 2 \times b_3 + 4 \times b_2 + 2 \times b_1 + 1 \times b_0 \]
где \(b_3\) — старший бит (самый левый), \(b_0\) — младший.
Однако кодирование не является однозначным: из-за неполного использования диапазона (16 возможных комбинаций на 10 цифр) некоторые цифры могут быть представлены двумя разными кодами. В стандартной реализации кода Айкена выбирается один из вариантов, обеспечивающий свойство самодополняемости.
Таблица кодирования
| Десятичная цифра | Код Айкена (2-4-2-1) |
|---|---|
| 0 | 0000 |
| 1 | 0001 |
| 2 | 0010 |
| 3 | 0011 |
| 4 | 0100 |
| 5 | 1011 |
| 6 | 1100 |
| 7 | 1101 |
| 8 | 1110 |
| 9 | 1111 |
Примечание. Коды для цифр 0–4 начинаются с бита 0, для цифр 5–9 — с бита 1. Это свойство позволяет легко определить знак числа при дополнительном кодировании.
Свойство самодополняемости
Если инвертировать все четыре бита кода любой цифры (заменить 0 на 1 и наоборот), полученный код будет соответствовать цифре, дополняющей исходную до 9. Например:
- Код цифры 2: 0010. Инверсия: 1101 — это код цифры 7. \(2 + 7 = 9\).
- Код цифры 4: 0100. Инверсия: 1011 — это код цифры 5. \(4 + 5 = 9\).
Это свойство обеспечивается выбором весов 2-4-2-1 и соответствующей таблицы кодирования. Благодаря ему для вычитания в десятичной арифметике достаточно сложить число с инвертированным кодом вычитаемого и добавить 1 (аналогично методу дополнения до 9 в десятичной системе).
Применение
В компьютерах серии Harvard Mark
В Harvard Mark I (1944) код Айкена использовался для хранения десятичных чисел в регистрах и для выполнения арифметических операций. Машина оперировала 23-разрядными десятичными числами (каждая цифра — 4 бита), что позволяло выполнять сложение, вычитание, умножение и деление с точностью до 23 десятичных знаков. Вычитание реализовывалось через инверсию кода и сложение, что упрощало конструкцию арифметического устройства.
В IBM 650
Компьютер IBM 650 (1953) использовал код Айкена для представления десятичных цифр в оперативной памяти на магнитных барабанах. Каждое слово содержало 10 десятичных цифр (40 бит) плюс знак. Арифметическое устройство IBM 650 также опиралось на свойство самодополняемости для выполнения вычитания. IBM 650 стал первым массовым компьютером (выпущено около 2000 экземпляров), что способствовало распространению кода Айкена в коммерческих вычислениях.
В IBM 1401
IBM 1401 (1959) — популярный мэйнфрейм для бизнес-приложений — также использовал код Айкена для внутреннего представления десятичных чисел. В этой машине код применялся не только для арифметики, но и для кодирования символов (букв и знаков) в расширенном варианте (6 бит на символ). Однако для буквенно-цифровых данных код Айкена был заменён на EBCDIC в более поздних моделях.
В учебных целях
Код Айкена изучается в курсах цифровой схемотехники и компьютерной арифметики как пример нестандартного взвешенного кода, иллюстрирующего преимущества самодополняемости. Он используется для демонстрации методов построения десятичных сумматоров и вычитателей на логических элементах.
Сравнение с другими кодами
Прямой двоичный код (BCD)
- BCD (8-4-2-1): веса 8, 4, 2, 1. Не является самодополняющимся. Вычитание требует дополнительных схем.
- Код Айкена: самодополняющийся, что упрощает вычитание, но кодирование неоднозначно (два варианта для некоторых цифр).
Код с избытком 3 (XS-3)
- XS-3: к коду BCD добавляется 3 (например, цифра 0 кодируется как 0011). Самодополняющийся, но не взвешенный.
- Код Айкена: взвешенный (2-4-2-1), что позволяет использовать весовые сумматоры.
Код Грея
- Код Грея: минимизирует переключения битов при последовательном изменении цифр. Не является взвешенным и не предназначен для арифметики.
- Код Айкена: оптимизирован для десятичной арифметики, а не для передачи данных.
Достоинства и недостатки
Достоинства
- Самодополняемость: упрощает реализацию вычитания в десятичной арифметике.
- Взвешенность: позволяет использовать стандартные двоичные сумматоры с весовыми коэффициентами.
- Простота определения знака: старший бит кода указывает на диапазон цифры (0–4 или 5–9), что удобно для дополнительного кода.
Недостатки
- Неоднозначность кодирования: некоторые цифры (например, 2 и 4) могут быть представлены двумя разными кодами, если не фиксировать таблицу. Стандартная таблица устраняет эту проблему, но снижает гибкость.
- Избыточность: 4 бита на цифру при 10 возможных значениях (эффективность 62,5% против 100% для 16 значений).
- Ограниченная применимость: код эффективен только для десятичной арифметики; для двоичной арифметики или символьных данных он уступает другим кодировкам.
Интересные факты
- Код Айкена иногда называют «кодом 2-4-2-1» по весам битов, но в литературе также встречается название «код Айкена-IBM» из-за широкого использования в машинах IBM.
- В компьютере Harvard Mark I код использовался вместе с электромеханическими реле: каждая четырёхбитная группа хранилась на наборе из четырёх реле.
- Свойство самодополняемости кода Айкена позволяет выполнять вычитание без отдельного вычитающего устройства: достаточно инвертировать код вычитаемого и прибавить 1, что эквивалентно операции «дополнение до 9» в десятичной системе.
- В современных FPGA и микроконтроллерах десятичная арифметика редко реализуется аппаратно; код Айкена сохраняет лишь историческое и учебное значение.
Источники
- Айкен, Говард. «Proposed Automatic Calculating Machine». Harvard University, 1937.
- IBM Corporation. «IBM 650 Magnetic Drum Data-Processing Machine: Manual of Operation». 1955.
- IBM Corporation. «IBM 1401 Data Processing System: Reference Manual». 1961.
- Кнут, Дональд Э. «Искусство программирования». Том 2: «Получисленные алгоритмы». 3-е издание, 1997.
- Флинн, Майкл Дж. «Computer Architecture: Pipelined and Parallel Processor Design». Jones & Bartlett, 1995.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →