- •Основы компьютерной арифметики и логики
- •Предисловие
- •Глава 4, подготовленная доцентом о.П. Шафеевой, посвящена вопросам разработки алгоритмических моделей выполнения арифметических операций и моделирования на пэвм спроектированных алгоритмов.
- •Основы двоичной компьютерной арифметики
- •1.1. Позиционные системы счисления
- •Десятичная позиционная система счисления
- •Двоичная позиционная система счисления
- •1.1.3. Восьмеричная позиционная система счисления
- •1.1.4. Шестнадцатеричная позиционная система счисления
- •Сложение Вычитание
- •Перевод чисел из одной позиционной системы счисления в другую
- •1.2.1. Перевод целых чисел
- •1.2.2. Перевод правильных дробей
- •1.2.3. Перевод неправильных дробей из одной системы счисления в другую
- •1.2.4. Частный случай перевода чисел из одной системы счисления в другую
- •1.2.5. Перевод чисел из одной системы счисления в другую с использованием промежуточной двоично-десятичной системы
- •1.3. Представление чисел с фиксированной запятой (точкой)
- •1.4. Представление чисел с плавающей запятой (точкой)
- •1.5. Коды двоичных чисел
- •1.5.1. Прямой код
- •1.5.2. Обратный код
- •1.5.3. Модифицированный обратный код
- •1.5.4. Дополнительный код
- •2.1.1. Алгебраическое сложение чисел в дополнительном коде
- •2.1.2. Алгебраическое сложение чисел в обратном коде
- •2.1.3. Переполнение разрядной сетки при сложении чисел
- •2.2. Сложение (вычитание) двоичных чисел с плавающей запятой
- •2.2.1. Метод ускоренного сложения двоичных чисел с запоминанием переносов
- •2.3. Умножение двоичных чисел с фиксированной запятой
- •2.4. Машинные технологии выполнения операции умножения двоичных чисел с фиксированной запятой
- •2.5. Умножение двоичных чисел с плавающей запятой
- •2.6. Методы ускоренного выполнения операции умножения двоичных чисел
- •2.6.1. Метод пропуска такта суммирования
- •2.6.2. Метод анализа сомножителей
- •2.6.3. Метод расшифровки и одновременного умножения на два разряда множителя
- •2.6.4. Метод ускоренного умножения Мак-Сорли
- •2.6.5. Метод ускоренного умножения Лемана
- •2.6.6. Метод умножения с расшифровкой пар разрядов множителя и запоминанием переносов
- •2.7. Деление двоичных чисел с фиксированной запятой
- •2.8. Деление двоичных чисел с плавающей запятой
- •3. Основы десятичной компьютерной арифметики
- •3.1. Машинное кодирование десятичных чисел
- •3.2. Выполнение арифметических операций с десятичными числами
- •3.2.1. Сложение десятичных чисел в эвм
- •3.2.2. Умножение десятичных чисел в эвм
- •3.2.3. Ускорение умножения в -кодах
- •Деление десятичных чисел в эвм
- •4.2. Моделирование алгоритма сложения двоичных чисел
- •Различные случаи ненормализованных мантисс
- •4.3. Проектирование алгоритма умножения чисел
- •4.5. Проектирование алгоритма деления чисел
- •4.7. Разработка алгоритма вычисления квадратного корня
- •Определение 1. Пусть и произвольные множества. Соответствием называется тройка множеств
- •Свойства отношений
- •Эквивалентность
- •Толерантность
- •Отношения порядка
- •Самодвойственные функции
- •Монотонные функции
- •Линейные функции
- •Функции, сохраняющие константу
- •5.2.7. Минимизация булевых функций
- •Метод Блейка
- •Метод Квайна-Мак-Класки
- •Минимизация с использованием карт Карно
- •Дана функция четырех переменных (рис. 5.13):
- •Минимизация не полностью определенных булевых функций
- •Минимизация систем булевых функций
- •5.3. Методика синтеза комбинационных схем на логических элементах
- •5.3.1. Логические элементы
- •5.3.2. Общий алгоритм построения комбинационных схем
- •5.3.3. Синтез кс в классическом базисе
- •5.3.4. Синтез кс в базисах «и-не», «или-не»
- •5.3.5. Реализация кс в базисе Жегалкина
- •5.3.6. Синтез составных кс
- •Заключение
- •Библиографический список к главам 1, 2, 3, 4
- •Библиографический список к главе 5
1.2.5. Перевод чисел из одной системы счисления в другую с использованием промежуточной двоично-десятичной системы
Перевод десятичных чисел в двоичные по универсальным правилам (алгоритмам), изложенным выше (путем деления целого числа и умножения дробного числа на два), так же как перевод двоичных чисел в десятичные (путем умножения и деления на десять), требует большого числа операций и значительного времени. В связи с этим на практике для перевода десятичных чисел в двоичные и двоичных в десятичные используют промежуточную двоично-десятичную систему счисления.
В двоично-десятичной системе счисления для изображения любой десятичной цифры от 0 до 9 отводится четыре двоичных разряда с весовыми коэффициентами 8-4-2-1, т.е. в двоично-десятичной системе десятичные цифры изображаются следующим образом:
0 = 0000; 1 = 0001; 2 = 0010; 3 = 0011; 4 = 0100;
5 = 0101; 6 = 0110; 7 = 0111; 8 = 1000; 9 = 1001.
Очевидно, что при таком представлении перевод двоичных чисел в двоично-десятичные и наоборот осуществляется легко и быстро с помощью шифраторов и дешифраторов. Поэтому при переводе десятичного числа в двоичное сначала десятичное число преобразуют в двоично-десятичное, после чего осуществляют его преобразование в двоичное.
Рассмотрим технологию преобразований на примере десятичного числа в двоичное.
Перепишем число с учетом весовых коэффициентов всех входящих в него десятичных цифр:
.
Заменим каждую цифру целой и дробной части числа ее изображением в двоично-десятичной системе:
Целая часть Дробная часть
7 = 0111 3 = 0011
3 = 0011 7 = 0111
4 = 0100 5 = 0101
Запишем в двоичной системе значение весовых коэффициентов для целой и дробной части числа :
Целая часть Дробная часть
(102)(10) = 1100100(2) (10-1)(10) = 0,0001100110(2)
(101)(10) = 1010(2) (10-2)(10) = 0,0000010100(2)
(100)(10) = 1(2) (10-3)(10) = 0,0000000001(2)
Теперь нетрудно найти двоичное представление целой и дробной части числа .
Целая часть числа в двоичной системе определяется следующим образом:
(0111) ∙ (1100100) + (0011) ∙ (1010) + (0100) ∙ (1) = 1011011110(2),
т.е. после выполнения соответствующих операций в двоичной системе имеем 734(10) = 1011011110(2).
Дробная часть числа в двоичной системе определяется следующим образом:
(0011) ∙ (0,0001100110) + (0111) ∙ (0,0000010100) +
+ (0101) ∙ (0,0000000001) = 0,0101111001(2),
т.е. после выполнения соответствующих двоичных операций имеем 0,375(10) = 0,0101111001(2).
Легко видеть, что при переводе дробной части появилась погрешность вследствие приближенного (ограниченного десятью двоичными разрядами) представления весовых коэффициентов цифр дробной части. Таким образом, . Перевод десятичного числа в двоичное завершен.
Обратный перевод двоичного числа в десятичную систему счисления также осуществляется с использованием двоично-десятичной системы счисления в качестве промежуточной. При переводе целых двоичных чисел в двоично-десятичную систему счисления используются два регистра сдвига, в первый из которых перед началом перевода записывается исходное двоичное число старшими разрядами вперед (влево), а во втором формируется двоично-десятичный результат перевода.
Для организации перевода -разрядного двоичного числа в двоично-десятичное требуется циклов, каждый из которых состоит из двух шагов:
1) сдвинуть двоичное число на один разряд из двоичного регистра в двоично-десятичный;
2) каждую десятичную цифру в двоично-десятичном регистре, превышающую 4, увеличить на три.
В качестве иллюстрации произведем перевод полученного выше двоичного числа 1011011110 в двоично-десятичную систему счисления. Для наглядности воспользуемся следующей таблицей, где римскими цифрами указан цикл, а арабскими - номер шага.
Номер |
Содержание регистров сдвига |
|||
Цикла |
Десятичные разряды |
Двоичные разряды |
||
И |
d2 |
d1 |
d0 |
x9 x8 x7 x6 x5 x4 x3 x2 x1 x0 |
Шага |
0 0 0 0 |
0 0 0 0 |
0 0 0 0 |
1 0 1 1 0 1 1 1 1 0 |
I 1 |
|
|
0 0 0 1 |
0 1 1 0 1 1 1 1 0 |
II 1 |
|
|
1 0 |
1 1 0 1 1 1 1 0 |
III 1 2 |
|
|
1 0 1 1 1 1 0 0 0 |
1 0 1 1 1 1 0
1 0 1 1 1 1 0 |
IV 1 |
|
1 |
0 0 0 1 |
0 1 1 1 1 0 |
V 1 |
|
1 0 |
0 0 1 0 |
1 1 1 1 0 |
VI 1 2 |
|
1 0 0
1 0 0 |
0 1 0 1 1 1 1 0 0 0 |
1 1 1 0
1 1 1 0 |
VII 1 2 |
|
1 0 0 1 1 1 1 1 0 0 |
0 0 0 1
0 0 0 1 |
1 1 0
1 1 0 |
VIII 1 2
|
1
1 |
1 0 0 0 1 1 1 0 1 1 |
0 0 1 1
0 0 1 1 |
1 0
1 0 |
IX 1 2 |
1 1
1 1 |
0 1 1 0 1 1 1 0 0 1 |
0 1 1 1 1 1 1 0 1 0 |
0
0 |
X 1 |
1 1 1 |
0 0 1 1 |
0 1 0 0 |
|
|
7 |
3 |
4 |
Результат в десятичной системе счисления |
Читателям предлагается самостоятельно произвести перевод полученной выше правильной дроби 0,0101111001 в десятичную систему, применяя изложенный способ с использованием промежуточной двоично-десятичной системы, и дать оценку погрешности перевода.
Известен еще один способ перевода целых чисел и правильных дробей из одной системы счисления в другую, основанный на следующих процедурах.
Для перевода целых чисел из системы счисления с основанием в систему с основание выполняется последовательное умножение цифр исходного числа, начиная со старшей цифры, записанного в системе счисления с основанием , на основание этой системы, суммирование полученного значения с цифрой следующего разряда и т.д. в системе счисления с основанием .
Аналогичная процедура проводится для дробных чисел, начиная с самой младшей цифры дроби, с заменой умножения делением.
Удобство данного способа, по-видимому, состоит в том, что требуется образовать только значения цифр и основания исходной -ичной системы счисления в -ичной системе.
Рассмотрим этот способ на двух примерах.
Пример.
Перевести целое число 10110110(2) из двоичной системы в десятичную систему счисления, т.е. а .
Последовательность
операций
С тарший разряд 1 1 х 2 = 2
0 (2+0) х 2 = 4
1 (4+1) х 2 = 10
1 (10+1) х 2 =22
0 (22+0) х 2 = 44
1 (44+1) х 2 = 90
1 (90+1) х 2 = 182
М ладший разряд 0 (182+0) = 182
Результат перевода: 10110110(2)=182(10).
Пример.
Перевести правильную дробь 0,1011(2) из двоичной системы счисления в десятичную.
Последовательность
операций
М ладший разряд 1 1 : 2 = 0,5
1 (0,5+1) : 2 =0,75
0 (0,75+0) : 2 = 0,375
С тарший разряд 1 (0,375+1) : 2=0,685
Результат перевода: 0,1011(2)=0,685(10).