Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Перевод чисел из одной системы в другую



Рассмотрим ситуацию, когда необходимо выполнить перевод числа из одной системы счисленияс произвольным основанием в систему счисления с другим основанием. Для определенности исходное число обозначим Zp. Как уже говорилось, основание системы подчеркивает нижний индекс p. Это число нам необходимо преобразовать в систему счисления с основанием q, т. е. получить Zq. Дело в том, что напрямую алгоритм преобразования для произвольных оснований не очень удобен. Удобнее выполнить преобразование через десятичную систему счисления, а именно сначала перевести Zp в Z10. После этого следует перевести Z10 в Zq. Что касается перевода Zp в Z10, то это выполнить несложно:

Z10 = pM – 1 × bM – 1 + … + p1 × b1 + p0 × b0. (2.5)

Сложение, умножение и возведение в степень здесь выполняется в десятичной системе счисления. В результате мы получим то же число, но только в десятичной системе счисления. Например, если 257 необходимо трансформировать в Z10, то преобразование следует выполнить так:

Z10 = 71 × 2 + 70 × 5 = 19. (2.6)

Как видно, перевод Zp в Z10 выполнить несложно. Для перевода Z10 в Zq следует применить более сложный процесс преобразования, который описывается в виде набора правил:

q необходимо разделить исходное число (Z10) на основание новой системы счисления (q) и получить остаток от деления — это будет цифра нулевого разряда числа Zq;

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

q последний результат деления и образовавшиеся остатки от деления, поставленные в порядке, обратном порядку их получения, и представляют Zq.

Рассмотрим действие этого алгоритма на примере. Задача заключается в том, чтобы выполнить преобразование числа 12310 в систему счисления с основанием 5.

1. Разделим 12310 на 5, что даст 24, а остаток от деления равен 3.

2. Разделим 2410 на 5, что приводит к результату — 4, а остаток от деления также равен 4. Далее последний результат (4) делить не требуется, т. к. 4 меньше основания системы счисления (пяти).

3. Сформируем результат — 4435. Здесь порядок записи цифр является обратным полученной последовательности — сначала последний результат деления, затем остаток от деления, полученный на последнем шаге и т. д.

Описанный словесно алгоритм схематично представлен на рис. 2.1.

Рис. 2.1. Перевод числа 12310 в систему счисления с основанием 5

Необходимо заметить, что полученное число нельзя читать " четыреста сорок три", поскольку десятки, сотни, тысячи и прочие подобные обозначения чисел относятся только к десятичной системе счисления. Прочитывать число следует простым перечислением его цифр с указанием системы счисления (" числа четыре, четыре, три в пятеричной системе счисления" ).

Рассмотрим теперь перевод чисел в системах счисления, более подходящих для вычислительной техники. Интерес к двоичной системе счисления вызван тем, что именно эта система используется для представления чисел в компьютере. Однако двоичная запись оказывается громоздкой, поскольку содержит много цифр, и, кроме того, она плохо воспринимается и запоминается человеком из-за зрительной однородности (все число состоит из нулей и единиц). Поэтому в нумерации ячеек памяти компьютера, записи кодов команд, нумерации регистров используются (когда эта информация предоставляется для визуального восприятия человеком) системы счисления с основаниями 8 и 16. Выбор именно этих систем счисления обусловлен тем, что переход от них к двоичной системе и обратно осуществляется, как будет показано далее, весьма простым образом.

Восьмеричная система счисления подразумевает основание 8 и цифры 0, 1, ..., 7. Правило перевода числа из двоичной системы в восьмеричную достаточно простое — двоичные цифры объединяются в группы по три (справа налево) и каждая группа заменяется восьмеричной цифрой. Для удобства таблица эквивалентов чисел в рассматриваемых системах счисления представлена в табл. 2.1.

Таблица 2.1. Перевод чисел из двоичной системы счисления в восьмеричную

Система счисления Числа
Двоичная
Восьмеричная

 

Например, требуется перевести число 01111100101101 из двоичной системы счисления в восьмеричную. Запишем число в виде 001 111 100 101 101 и в соответствии с табл. 2.1 заменим каждую тройку двоичных разрядов на ее восьмеричный эквивалент — 174558.

Примечание

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

Если требуется выполнить обратный переход (из восьмеричной системы в двоичную), то для этого также удобно воспользоваться табл. 2.1. В этом случае следует заменить одну восьмеричную цифру тремя двоичными в соответствии с рассматриваемой таблицей. Например, перевод 45238 приводит к 1001010100112.

Для удобства представления чисел в вычислительных системах также широко используется шестнадцатеричная система счисления, которая предполагает основание 1610 и цифры 0, 1, ..., 9, A, B, C, D, E, F. При этом знак A является шестнадцатеричной цифрой, соответствующей числу 10 в десятичной системе. Далее: B — 11 в десятичной, С — 12 в десятичной и т. д. Самая старшая цифра F соответствует числу 15 в десятичной системе счисления.

Правило перевода числа из двоичной системы в шестнадцатеричную достаточно простое — двоичные цифры объединяются в группы по четыре (справа налево) и каждая группа заменяется одной шестнадцатеричной цифрой. Для удобства информация об эквивалентах чисел в рассматриваемых системах счисления представлена в табл. 2.2.

Таблица 2.2. Перевод чисел из двоичной системы счисления в шестнадцатеричную

  Десятичная Двоичная Шестнадцатеричная
A
B
C
D
E
F
       

 

Например, требуется перевести число 01111100101101 из двоичной системы счисления в шестнадцатеричную. Для этого в соответствии с табл. 2.2 заменяем группы двоичных разрядов 0001 1111 0010 1101 — 1F2D16.

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

Например, перевод 4DAB16 в двоичную систему счисления приводит к 0100 1101 1010 10112.

Дробные числа

Мы сознательно в начале главы ограничили наши действия только целыми числа. Теперь приведем соотношение и методику работы с дробными числами. Для начала скорректируем соотношение (2.1) следующим образом:

Z = aM – 1 × bM – 1 + … + a1 × b1 + a0 × b0 + a–1 × b–1 + a–2 × b–2 + … (2.7)

Для отделения дробной части от целой используется точка (либо запятая). Рассмотрим перевод дробных чисел из двоичной системы счисления в десятичную. Такой перевод принципиально не отличается от перевода целых чисел (добавляются только новые веса, которые меньше единицы). Например, для перевода 1100.1012 следует выполнить такое преобразование:

Z10 = 1 × 23 + 1 × 22 + 0 × 21 + 0 × 20 + 1 × 2–1 + 0 × 2–2 + 1 × 2–3.

После выполнения технических действий результат выглядит так: Z10 = 12.625.

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

q перевод целой части числа из десятичной системы счисления в двоичную (эту процедуру мы рассматривали выше);

q перевод дробной части из десятичной системы счисления в двоичную.

Второй алгоритм нам еще не встречался, и сейчас мы его разберем. Пусть исходное число выглядит следующим образом:

Z10 = w × y,

где y — дробная часть числа в десятичной системе счисления, а w — целая часть этого числа. Наша задача заключается в том, чтобы перевести y в двоичную систему. Опишем последовательность действий по шагам:

1. Умножим y на 2, что в результате дает целую компоненту и дробную часть; при этом целая часть представляет цифру b–1 при весе a–1 в соотношении (2.7).

2. Дробную часть, полученную от предыдущего действия, следует умножить на 2; целая часть результата умножения представляет цифру b–2 при весе a–2.

3. Дробную часть, полученную от предыдущего действия, следует умножить на 2; после этого целая часть представляет цифру b–3 при весе a–3.

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

Проиллюстрируем сказанное на примере. Пусть задача заключается в переводе числа 11.7 из десятичной системы счисления в двоичную. Первый этап связан с переводом целой части в двоичную систему счисления (рис. 2.2). В результате знакомый алгоритм нам дает число 10112. Второй этап связан с переводом дробной части (0.7) также в двоичную систему счисления. И здесь используем описанный в этом разделе алгоритм для перевода дробной части числа:

1. 0.7 умножаем на 2, что дает 1.4; в итоге целая часть результата представляет вес b–1 = 1.

2. Дробная часть от предыдущей операции умножается на 2, что приводит к результату 0.8, и после этого целая часть результата составляет b–2 = 0.

3. Дробная часть от предыдущей операции умножается на 2, что приводит к результату 1.6; поэтому 1 представляет цифру b–3.

4. Если точность в три двоичных знака после запятой достаточна, то процесс перевода можно завершить.

Рис. 2.2. Перевод целой части числа в двоичную систему счисления

Таким образом, приближенный перевод 11.7 из десятичной системы в двоичную дает: 1011.1012. Если это число перевести обратно в десятичную систему, то получим 11.625. Для достижения большей точности при переводе из десятичной системы счисления в двоичную следует продолжить алгоритм преобразования дробной части. Таким образом, даже если исходное дробное число не получится абсолютно точно перевести в двоичную систему счисления, то за счет большого количества разрядов (после точки) можно получить очень близкое число к исходному.

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

Действия над числами

Важной особенностью представления чисел в вычислительной технике является то, что, в отличие от записи числа на бумаге, компьютерные ячейки имеют ограниченный размер и, следовательно, вынуждают нас использовать при записи чисел и действиях с ними конечное количество разрядов. Рассмотрим двоичную систему счисления. Например, при восьмиразрядной сетке (восемь двоичных разрядов для представления информации) число 710 записывается следующим образом — 0000 01112 .

Основные действия над числами — это сложение и вычитание. Сами правила сложения и вычитания нам знакомы по работе с десятичными числами (отличие только в основании системы счисления). Так, сложение двух чисел в двоичной системе счисления выполняется поразрядно, при этом используется следующая таблица сложения:

q 0 + 0 = 0;

q 1 + 0 = 1;

q 0 + 1 = 1;

q 1 + 1 = 0 и единица переноса добавляется к следующему разряду (принимает участие при сложении в следующем разряде).

Здесь следует отметить, что при сложении цифр в очередном разряде мы должны добавить единицу переноса из предыдущего, если такое событие имело место. Проиллюстрируем сказанное на примере (рис. 2.3).

Рис. 2.3. Сложение на восьмиразрядной сетке

Здесь в нескольких разрядах происходит сложение с учетом бита переноса. Технически данный процесс в вычислительных системах выполняется автоматически с помощью аппаратных средств. Возможна ситуация, когда при выполнении сложения в старшем разряде происходит перенос. Однако, это разряд последний (если 8-разрядная сетка, то старший разряд — седьмой, а младший — нулевой) и переносить, следовательно, некуда. В этом случае единица переноса фиксируется в специальном флаге переноса(индикаторе переноса). Такой флаг есть во всех микропроцессорах. И, в результате факт переноса из старшего разряда не теряется.

Теперь рассмотрим вычитание двоичных чисел. Аналогично сложению вычитание двух чисел в двоичной системе счисления выполняется поразрядно, при этом правила таковы:

q 0 – 0 = 0;

q 1 – 0 = 1;

q 1 – 1 = 0;

q 0 – 1 = 1 — связано с тем, что единица берется из следующего (старшего) разряда (из него происходит заем бита).

Таким образом, при вычитании, если это требуется (когда нужно вычесть единицу из нуля в очередном разряде) мы должны забрать единицу заема из старшего разряда. Фактически в этом случае из старшего разряда единица вычитается. Если же единицы в старшем разряде не оказывается, то мы должны забрать ее из следующего старшего разряда и т. д. Подобное действие называется " произвести заем из старшего разряда". Проиллюстрируем сказанное на примере (рис. 2.4).

Рис. 2.4. Вычитание на восьмиразрядной сетке

На рис. 2.4 в нескольких разрядах происходит вычитание с учетом бита заема. Возможна ситуация, когда при выполнении вычитания необходимо выполнить заем в самый старший разряд. Однако, т. к. этот разряд последний, то занимать неоткуда. В подобном случае заем все-таки производится, и этот факт фиксируется в уже известном флаге — флаге переноса (в операциях вычитания флаг переноса превращается во флаг заема). Таким образом, факт заема в старший разряд не теряется.

Описанные здесь действия стандартные и выполняются вычислительной системой на аппаратном уровне.


Поделиться:



Последнее изменение этой страницы: 2017-03-15; Просмотров: 503; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.027 с.)
Главная | Случайная страница | Обратная связь