
- •Компьютерная арифметика и алгоритмическое моделирование арифметических операций
- •Введение
- •Глава 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. Дополнительный код
- •1.5.5. Модифицированный дополнительный код
- •2. Выполнение арифметических операций с двоичными числами
- •2.1. Сложение (вычитание) двоичных чисел с фиксированной запятой
- •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. Алгоритмические модели выполнения арифметических операций
- •4.1. Проектирование универсального алгоритма перевода чисел в разные системы счисления
- •4.2. Моделирование алгоритма сложения двоичных чисел
- •Различные случаи ненормализованных мантисс
- •4.3. Проектирование алгоритма умножения чисел
- •4.5. Проектирование алгоритма деления чисел
- •4.7. Разработка алгоритма вычисления квадратного корня
- •Компьютерная арифметика и алгоритмическое моделирование арифметических операций
1.5. Коды двоичных чисел
В ЭВМ в силу определенных схемотехнических ограничений операция сложение реализуется значительно проще, чем операция вычитание. Поэтому операцию вычитание заменяют операцией сложение специально подобранных кодов, которыми изображаются двоичные числа, являющиеся правильными дробями (положительными или отрицательными).
На практике чаще всего применяются следующие коды: прямой, обратный, дополнительный, модифицированный обратный и модифицированный дополнительный.
Изображение положительных чисел – правильных дробей – совпадает во всех трех кодах (прямом, обратном и дополнительном), а изображение отрицательных чисел – правильных дробей – в соответствующих кодах различается.
1.5.1. Прямой код
Пусть
– правильная двоичная дробь (положительная
или отрицательная). В частном случае
равно нулю.
Прямым
кодом числа
называется число, обозначаемое символом
,
получаемое по следующей формуле:
Иными
словами, если
где
,
то
.
Если
,
то
.
Следовательно, прямой код двоичного числа совпадает по изображению с записью самого числа, при этом в знаковом разряде для положительных чисел записывается 0, а для отрицательных 1.
Пример.
X = + 0,1100111011; [X]np = [+ 0,1100111011]np = 0,1100111011;
X = – 0,1100111011; [X]np = [– 0,1100111011]np = 1–(–0,1100111011)=1,1100111011.
Из определения прямого кода вытекает, что нуль имеет два отвечающих ему значения прямого кода:
[0]np = [+ 0,00…0…0]np = 0,000…0…0;
[0]np = [– 0,00…0…0]np = 1,000…0…0.
1.5.2. Обратный код
Пусть
– правильная двоичная дробь, в частности
.
Обратным
кодом числа
называется число, обозначаемое символом
,
получаемое по следующей формуле:
где – количество цифр (разрядов) дробной части числа ; 10 – означает два.
Из
определения обратного кода следует,
что для положительного
имеет место совпадение прямого и
обратного кодов, т.е. в этом случае
.
Для
отрицательного
обратный код образуется следующим
образом:
,
где
,
если
,
,
если
.
Иными словами, обратный код отрицательного двоичного числа получается следующим образом: в знаковый разряд записывается 1, а значения всех двоичных цифр дробной части инвертируются, т.е. заменяются на противоположные (нуль – на единицу, а единица – на нуль).
Пример.
X = + 0,110011101; [X]ob =[+ 0,1100111011]ob =0,1100111011;
X = – 0,110011101; [X]ob =[– 0,1100111011]ob = 1,0011000100.
Для перевода обратного кода отрицательного числа в прямой код необходимо значение всех цифровых разрядов инвертировать, оставив знаковый разряд без изменения.
Согласно определению обратного кода следует, что для изображения нуля возможны два значения кода:
[0]ob = [ + 0,00…0…0]ob = 0,00…0…0;
[0]ob = [– 0,00…0…0]ob = 1,11…1…1.