Пример 1.2. Привести десятичную дробь N =0.34375 в двоичную систему счисления (q=2).
Операции перевода приведены в табл. 1.3.
Таблица 1.3 – Перевод дробного числа
Шаги | Операция умножения | Произведение | Целая часть (цифра) | Разряд | Примечание |
1 | 2*0.34375 | 0.6875 | 0 | b-1 | Старший разряд |
2 | 2*0.6875 | 1.375 | 1 | b-2 | |
3 | 2*0.375 | 0.75 | 0 | b-3 | |
4 | 2*0.75 | 1.5 | 1 | b-4 | |
5 | 2*0.5 | 1.0 | 1 | b-5 | Младший разряд |
Ответ: N(2) =0. b-1 b-2 b-3 b-4 b-5 =0. 01011.
Переводя правильные дроби из одной системы счисления в другую, можно получить дробь в виде бесконечного или расходящегося ряда. В этом случае рекомендуется процесс перевода заканчивать, если появится дробная часть, имеющая во всех разделах нули, или будет достигнута заданная точность перевода (получено требуемое число разрядов результата).
Естественно, что при этом возникает погрешность перевода чисел. В ЭВМ точность перевода обычно ограничивается длиной разрядной сетки, отведенной для представления чисел.
Для удобства преобразования двоичных чисел в десятичные приведем значения веса некоторых разрядов (позиций) двоичной системы счисления в пределах b15 ... b-6 (см. табл. 1.4).
Таблица 1.4 – Веса разрядов двоичного числа
215 | 214 | 213 | 212 | 211 | 210 | 29 | 28 | 27 | 26 | 25 |
32768 | 16384 | 8192 | 4096 | 2048 | 1024 | 512 | 256 | 128 | 64 | 32 |
24 | 23 | 22 | 21 | 20 | 2-1 | 2-2 | 2-3 | 2-4 | 2-5 | 2-6 |
16 | 8 | 4 | 2 | 1 | 0.5 | 0.25 | 0.125 | 0.0625 | 0.03125 | 0.015625 |
Пример 1.3 Перевести двоичное число N(2) =1101. 0101 в десятичное
Как и ранее, ход решения отобразим с помощью табл. 1. 5.
Таблица 1.5 – Перевод дробного числа
Шаги | Двоичное число (код) | Вес двоичного разряда | Промежуточные значения | |||||||
1 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | |||
1 | 2-4 | 0,0625 | 1*0,0625=0,0625 | |||||||
2 | 2-3 | 0,125 | 0*0,125=0 | |||||||
3 | 2-2 | 0,25 | 1*0,25=0,25 | |||||||
4 | 2-1 | 0,5 | 0*0,5=0 | |||||||
5 | 20 | 1,0 | 1*1,0=1,0 | |||||||
6 | 21 | 2,0 | 0*2,0=0 | |||||||
7 | 22 | 4,0 | 1*4,0=4,0 | |||||||
8 | 23 | 8,0 | 1*8,0=8,0 | |||||||
Σ(10)=13. 3125 |
Ответ: десятичный эквивалент равен сумме промежуточных значений N10=13. 3125.
В информатике и вычислительной технике разработано множество других методов перевода чисел из одной системы счисления в другую, позволяющих получить результат с меньшими затратами времени на преобразования.
Шестнадцатеричные числа. Шестнадцатеричная система счисления (Н-код происходит от hexadecimal), система с основанием 16 использует символы от 0 до F. Такая форма числа удобна для записи, запоминания и ввода с клавиатуры. Компактность достигается путем разделения бит двоичного числа на тетрады (4 бит) и тогда число комбинаций составит 2 =16.
Пример 1.4 Представить двоичное число N2 =110010111010 шестнадцатеричным N16 или NH, где Н указывает на принадлежность системы счисления к шестнадцатеричной.
Решение: надо начать с младшего бита (МБ) и разделить двоичное число на группы из четырех бит. Затем эти группы заменить эквивалентной шестнадцатеричной цифрой. Первая группа 1010=А, вторая - 1011=В, третья - 100=С, следовательно, результат:
1010 1011 1100 =СВА16 или в Н-коде СВАН.
Поскольку обратные преобразования в рассмотренном примере не встречают затруднения, то рассмотрим преобразования чисел из D-кода (десятичного) в Н-код и обратно.
Пример 1.5 Преобразовать десятичное дробное число в Н-код.
Решение представим в двух частях: отдельно для целой части и для дробной.
В первом случае воспользуемся методикой, заложенной в табл. 1.2, проделаем для N =634. 328125 следующие несложные процедуры (рис. 1.2).
мл. разряд
Шаг 1. 634 : 16 = 39, остаток 1010 = А16 Шаг 1. 39 : 16 = 2, остаток 710 = 716ст. разряд
Шаг 3. 2 : 16, остаток 210 = 21663410 = 2 7 А16
Рисунок 1.2 – Десятично-шестнадцатеричное преобразование целой части числа
Для преобразования дробной части воспользуемся схемой операций, приведенных в табл. 1.3. А именно, поэтапно (рис. 1.3):
Шаг 1. 16 · 0. 328125 = 5.25 целая часть "5" ст. разряд0,328125 = 0. 5 4
Рисунок 1.3 – Десятично-шестнадцатеричный перевод дробной части числа
Пример 1.6 Обратное преобразование шестнадцатеричного числа в десятичное: N16 =5CBA. 27.
Целая часть числа в табл.1.6 получила свой десятичный эквивалент в виде N10 =23738.
Таблица 1.6 – Преобразование шестнадцатеричного числа в десятичное
Степень позиции | 163 | 162 | 161 | 160 | Результат | |||
Значение позиции | 4096 | 256 | 16 | 1 | ||||
Н-код | 5 | С | В | А | ||||
4096 | 256 | 16 | 1 | |||||
* | * | * | * | |||||
5 | 12 | 11 | 10 | |||||
D-код | 20480 | + | 3072 | + | 176 | + | 10 | = 23 73816 |
Несколько упростив запись по сравнению с табл. 1.6, дробную часть Н-кода можно вычислить по следующей схеме, помня, что 16=0.0625, а 16≈0. 0039:
Н-код 0. 2 7
Вес позиций 16-1 16-2 7·0, 0039 = 0. 0273 2·0, 0625 = 0.1250сумма дробной части = 0. 152310
Тогда результат определяемого преобразования равен 5CBA.27H=23738.1523D.
В отношении восьмеричных чисел ограничимся лишь замечанием, что они как и шестнадцатеричные, используются для представления двоичных чисел в системе с основанием 8=23 (группа из трех бит). Методика прямых и обратных преобразований остается аналогичной, например, шестнадцатеричной системе.
Преобразование восьмеричных в шестнадцатеричные числа производится через двоичную систему счисления.
Двоично-десятичные числа. С целью удобства преобразования чистые двоичные числа представляются десятичными либо шестнадцатеричными. Хотя двоично-десятичное преобразование является не простой операцией, в калькуляторах и числовых приборах используют специальный двоично-десятичный код (DDK), когда на доступных пользователю выходах и входах используются десятичные числа. При использовании двоичных чисел для кодирования десятичных данных необходимо иметь возможность представлять цифры от 0 до 9, т.е. для изображения цифры 9 предельно требуется 4 бит для группы 10011. Однако все 4-разрядные двоичные числа, превышающие 10012, недопустимы в DDK. Чтобы освободить пользователя от подобных преобразований, в системной программе ЭВМ предусматривается специальная команда "Десятичная коррекция", обеспечивающая переполнение 4-разрядного регистра при N10=10 путем добавления числа 01102 (+610).
Пример 1.7. Произвести операции преобразования десятичного числа (D-кода) в DDK, а затем записать десятичный эквивалент (обратная задача).
Решение. Пусть имеем дело с десятичным числом 357910. Каждая цифра числа преобразуется прямо в свой двоично-десятичный эквивалент из 4 бит, в результате получаем:
Десятичное число 3 5 7 9
Двоично-десятичное число 0011 0101 0111 1001
Ответ: 357910 =0011 0101 0111 1001(2-10К).
Решим обратную задачу для DDK в виде: 1000 0010 0110 0000.
Решение. Каждая группа из 4 бит прямо переводится в ее десятичный эквивалент:
DDK 1000 0010 0110 0000
D-код 8 2 6 0
Ответ: 1000 0010 0110 0000(2-10К) =8260D.
МП складывает чистые двоичные числа, но, как отмечалось выше, они имеют команды для преобразования результата своих сложений в двоично-десятичную форму. Полученный DDK легко затем представляется в десятичной форме, используя вышеописанные простые процедуры.
Литература
1. Кибернетика – основа наук – под ред. проф. Карул К.В. - К. – 2009 г.
2. Основы микропроцессорных исчислений – под ред. Мозаев Г.Н. – М. – 2007 г.