Десятичный код.
Двоично-десятичный код (англ. binary-coded decimal), BCD, 8421-BCD — это такая форма записи целых чисел, когда в виде четырехбитного двоичного кода записывается каждый десятичный разряд числа.
К примеру, десятичное число 31110 в двоичной системе счисления записано будет в двоичном коде так : 1 0011 01112, в двоично-десятичном коде оно будет записано как 0001 0001BCD.
Кстати, на нашем сайте вы можете перевести любой текст в десятичный, шестнадцатеричный, двоичный код воспользовавшись Калькулятором кодов онлайн.
В формате BCD из Unsigned Integer простой способ получения данных такой:
Число «A» в формате U16 = 542,
теперь, выполнив преобразование его в BCD (проделать операцию можно на калькуляторе ОС Windows) получаем :
542 -> (Hex to Dec) -> 1346 -> (Dec to Bin) -> 10101000010
Особенности десятичного кода.
Из преимуществ двоично-десятичного кода можно выделить такие:
— Вывод чисел на индикацию упрощен — требуется просто сделать вывод на индикацию каждого полубайта, вместо последовательного деления на 10 и аналогично, с цифровой клавиатуры проще ввод данных.
— При переводе в доступный человекочитаемый десятичный формат или наоборот — не теряется точность для дробных чисел (с фиксированной, а также плавающей запятой).
— Упрощены операции умножения или деления на 10, а также округление.
Учитывая все эти преимущества, формат двоично-десятичного кода применяется в калькуляторах, ведь в простейших арифметических операциях, калькулятор должен в точности такой же самый выводить результат, какой человек подсчитает на бумаге.
Кроме достоинств, двоично-десятичный код имеет и свои характерные недостатки: требуется больше памяти и усложнены арифметические операции. Так как, вместо 16 в в 8421-BCD используются только 10 возможных комбинаций 4-х битового поля, поэтому при операциях сложения и вычитания чисел в формате 8421-BCD действуют такие правила:
— Каждый раз при сложении двоично-десятичных чисел, когда в старший полубайт происходит перенос бита, необходимо добавить корректирующее значение 0110 (= 610 = 1610 — 1010: разница количеств используемых значений и комбинаций полубайта) к тому полубайту, от которого был произведен перенос.
— Когда встречается комбинация недопустимая для полубайта то необходимо добавить с разрешением переноса в старшие полубайты к каждой недопустимой комбинации корректирующее значение 0110, каждый раз при выполнении сложения двоично-десятичных чисел.
— Для каждого полубайта, который получил заем из старшего полубайта, при вычитании двоично-десятичных чисел, необходимо провести коррекцию, для этого нужно отнять значение 0110.
Операция по сложению двоично-десятичных чисел на примере выглядит так: Задача: Определить число A = D + C, где D = 3927, C = 4856
Решение: Числа D и C представим в виде двоично-десятичного кода:
- D = 392710 = 0011 1001 0010 0111BCD
- C = 485610 = 0100 1000 0101 0110BCD
Затем по правилам двоичной арифметики числа D и С — суммируем:
- 0011 1001 0010 0111
- + 0100 1000 0101 0110
- = 1000 0001 0111 1101 — Двоичная сумма
- + 0110 0110 — Коррекция
1000 0111 1000 0011
- ‘*’ — тетрада, из которой происходил перенос в старшую тетраду
- ‘**’ — тетрада с являющейся запрещенной комбинацией битов
Перевод чисел в различные системы счисления с решением
Калькулятор позволяет переводить целые и дробные числа из одной системы счисления в другую. Основание системы счисления не может быть меньше 2 и больше 36 (10 цифр и 26 латинских букв всё-таки). Длина чисел не должна превышать 30 символов. Для ввода дробных чисел используйте символ . или , . Чтобы перевести число из одной системы в другую, введите исходное число в первое поле, основание исходной системы счисления во второе и основание системы счисления, в которую нужно перевести число, в третье поле, после чего нажмите кнопку «Получить запись».
Исходное число записано в -ой системе счисления.
Хочу получить запись числа в -ой системе счисления.
Системы счисления
Системы счисления делятся на два типа: позиционные и не позиционные. Мы пользуемся арабской системой, она является позиционной, а есть ещё римская − она как раз не позиционная. В позиционных системах положение цифры в числе однозначно определяет значение этого числа. Это легко понять, рассмотрев на примере какого-нибудь числа.
Пример 1. Возьмём число 5921 в десятичной системе счисления. Пронумеруем число справа налево начиная с нуля:
Число: | 5 | 9 | 2 | 1 |
Позиция: | 3 | 2 | 1 | 0 |
Число 5921 можно записать в следующем виде: 5921 = 5000+900+20+1 = 5·10 3 +9·10 2 +2·10 1 +1·10 0 . Число 10 является характеристикой, определяющей систему счисления. В качестве степеней взяты значения позиции данного числа.
Пример 2. Рассмотрим вещественное десятичное число 1234.567. Пронумеруем его начиная с нулевой позиции числа от десятичной точки влево и вправо:
Число: | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
Позиция: | 3 | 2 | 1 | 0 | -1 | -2 | -3 |
Число 1234.567 можно записать в следующем виде: 1234.567 = 1000+200+30+4+0.5+0.06+0.007 = 1·10 3 +2·10 2 +3·10 1 +4·10 0 +5·10 -1 +6·10 -2 +7·10 -3 .
Перевод чисел из одной системы счисления в другую
Наиболее простым способом перевода числа с одной системы счисления в другую, является перевод числа сначала в десятичную систему счисления, а затем, полученного результата в требуемую систему счисления.
Перевод чисел из любой системы счисления в десятичную систему счисления
Для перевода числа из любой системы счисления в десятичную достаточно пронумеровать его разряды, начиная с нулевого (разряд слева от десятичной точки) аналогично примерам 1 или 2. Найдём сумму произведений цифр числа на основание системы счисления в степени позиции этой цифры:
1. Перевести число 1001101.11012 в десятичную систему счисления.
Решение: 10011.11012 = 1·2 4 +0·2 3 +0·2 2 +1·2 1 +1·2 0 +1·2 -1 +1·2 -2 +0·2 -3 +1·2 -4 = 16+2+1+0.5+0.25+0.0625 = 19.812510
Ответ: 10011.11012 = 19.812510
2. Перевести число E8F.2D16 в десятичную систему счисления.
Решение: E8F.2D16 = 14·16 2 +8·16 1 +15·16 0 +2·16 -1 +13·16 -2 = 3584+128+15+0.125+0.05078125 = 3727.1757812510
Ответ: E8F.2D16 = 3727.1757812510
Перевод чисел из десятичной системы счисления в другую систему счисления
Для перевода чисел из десятичной системы счисления в другую систему счисления целую и дробную части числа нужно переводить отдельно.
Перевод целой части числа из десятичной системы счисления в другую систему счисления
Целая часть переводится из десятичной системы счисления в другую систему счисления с помощью последовательного деления целой части числа на основание системы счисления до получения целого остатка, меньшего основания системы счисления. Результатом перевода будет являться запись из остатков, начиная с последнего.
3. Перевести число 27310 в восьмиричную систему счисления.
Решение: 273 / 8 = 34 и остаток 1, 34 / 8 = 4 и остаток 2, 4 меньше 8, поэтому вычисления завершены. Запись из остатков будет иметь следующий вид: 421
Проверка: 4·8 2 +2·8 1 +1·8 0 = 256+16+1 = 273 = 273 , результат совпал. Значит перевод выполнен правильно.
Ответ: 27310 = 4218
Рассмотрим перевод правильных десятичных дробей в различные системы счисления.
Перевод дробной части числа из десятичной системы счисления в другую систему счисления
Напомним, правильной десятичной дробью называется вещественное число с нулевой целой частью. Чтобы перевести такое число в систему счисления с основанием N нужно последовательно умножать число на N до тех пор, пока дробная часть не обнулится или же не будет получено требуемое количество разрядов. Если при умножении получается число с целой частью, отличное от нуля, то целая часть дальше не учитывается, так как последовательно заносится в результат.
4. Перевести число 0.12510 в двоичную систему счисления.
Решение: 0.125·2 = 0.25 (0 — целая часть, которая станет первой цифрой результата), 0.25·2 = 0.5 (0 — вторая цифра результата), 0.5·2 = 1.0 (1 — третья цифра результата, а так как дробная часть равна нулю, то перевод завершён).
Ответ: 0.12510 = 0.0012
Что такое BCD
BCD — это Binary-Coded Decimal (двоично-десятичный код). Он же 8421-BCD.
Это форма записи рациональных чисел, когда каждый десятичный разряд числа записывается в виде его четырёхразрядного двоичного кода.
Вообще с помощью четырёхразрядного двоичного кода можно закодировать 16 чисел — это шестнадцатеричная система.
Двоично-десятичный код отличается от шестнадцатеричной системы тем, что он использует только первые десять комбинаций. Значения BCD приведены в таблице ниже.
Десятичное | HEX | BIN | BCD |
0 | 0 | 0000 | 0000 |
1 | 1 | 0001 | 0001 |
2 | 2 | 0010 | 0010 |
3 | 3 | 0011 | 0011 |
4 | 4 | 0100 | 0100 |
5 | 5 | 0101 | 0101 |
6 | 6 | 0110 | 0110 |
7 | 7 | 0111 | 0111 |
8 | 8 | 1000 | 1000 |
9 | 9 | 1001 | 1001 |
10 | A | 1010 | Запрещено |
11 | B | 1011 | Запрещено |
12 | C | 1100 | Запрещено |
13 | D | 1101 | Запрещено |
14 | E | 1110 | Запрещено |
15 | F | 1111 | Запрещено |
В BCD используются только первые 10 комбинаций, которыми можно закодировать 10 цифр от 0 до 9. Остальные комбинации в BCD являются запрещёнными.
BCD код также применяется в телефонной связи. В этом случае кроме десятичных цифр кодируются символы * или #, или любые другие. Для записи этих символов в коде BCD используются запрещенные комбинации:
BCD | Дополнительный символ |
1010 | * (звёздочка) |
1011 | # (решётка) |
1100 | (плюс) |
1101 | — (минус) |
1110 | , (десятичная запятая) |
1111 | символ гашения |
Преимущества и недостатки формата BCD
Преимущества
- Удобно использовать для вывода на индикаторы с одной цифрой. Например, в часах каждый индикатор отображает десятичное число в двоично-десятичной системе (от 0 до 9).
- Упрощён вывод чисел на индикацию — вместо последовательного деления на 10 требуется просто вывести на индикацию каждый полубайт. По этой же причине проще ввод данных с цифровой клавиатуры.
- Для дробных чисел (как с фиксированной, так и с плавающей запятой) при переводе в человекочитаемый десятичный формат и наоборот не теряется точность.
- Упрощены умножение и деление на 10, а также округление.
По этим причинам двоично-десятичный формат применяется в калькуляторах и других устройствах, которые выводят данные на семисегментные или другие индикаторы, где каждый отдельный индикатор отображает только одну цифру.
Недостатки
- Требует больше памяти.
- Усложнены арифметические операции.
Операции с BCD
Так как в BCD данных используются только 10 возможных комбинаций 4-х битового поля вместо 16, существуют запрещённые комбинации битов (см. выше). Поэтому, при сложении и вычитании чисел BCD действуют следующие правила:
- При сложении двоично-десятичных чисел каждый раз, когда происходит перенос бита в старший полубайт, необходимо к полубайту, от которого произошёл перенос, добавить поправочное значение 0110 = 610 = (1610 — 1010) — разница количеств комбинаций полубайта и используемых значений, то есть всего комбинаций в тетраде 16, из них разрешённых 10, а запрещенных 6.
- При сложении двоично-десятичных чисел каждый раз, когда встречается недопустимая для полубайта комбинация (число, большее 9), необходимо к каждой недопустимой комбинации добавить поправочное значение 0110 с разрешением переноса в старшие полубайты.
- При вычитании двоично-десятичных чисел, для каждого полубайта, получившего заём из старшего полубайта, необходимо провести поправку, отняв значение 0110.
Поэтому почти в любом языке ассемблера есть специальные команды для работы с BCD числами.
Пример операции сложения двоично-десятичных чисел:
Требуется: Найти число Х = Y + Z, где Y = 0929, Z = 1538
Решение: Представим числа Y и Z в двоично-десятичной форме:
Суммируем числа Y и Z по правилам двоичной арифметики:
В тетраду, помеченную символом *, добавляем шестёрку, так как по правилам двоичной арифметики перенос унёс с собой 16, а по правилам десятичной арифметики должен был унести 10.
В тетраду, помеченную символом **, добавляем шестёрку и разрешаем распространение переноса, так как комбинация битов 1110 в сумме после сложения соответствует десятичному числу 14 и является запрещённой.
ПРИМЕЧАНИЕ
По сути BCD — это та же шестнадцатеричная система, только с числами от 0 до 9 (числа A. F являются запрещёнными). То есть каждая тетрада записывается в числе BCD в отдельном разряде.