Lektsia_11-DESKTOP-1V17ANP.ppt
- Количество слайдов: 40
Сложение и вычитание целых чисел с фиксированной запятой. Сложение и вычитание чисел с плавающей запятой 1
Любая информация (числа, команды, записи и т. п. ) представляется в ЭВМ в виде двоичных кодов фиксированной или переменной длины. Отдельные элементы двоичного кода, имеющие значение 0 или 1, называют разрядами или битами. Двоичный код, состоящий из 8 разрядов, носит название байта. Для записи чисел также используют 32 -разрядный формат (машинное слово), 16 -разрядный формат (полуслово) и 64 -разрядный формат (двойное слово). В ЭВМ с целью упрощения выполнения арифметических операций применяют специальные коды для представления чисел. Использование кодов позволяет свести операцию вычитания чисел к арифметическому сложению кодов этих чисел, при этом упрощается определение знака результата операции и облегчается выработка признаков переполнения разрядной сетки. Применяются прямой, обратный и дополнительный коды чисел. В результате упрощаются устройства ЭВМ, выполняющие арифметические операции. К кодам предъявляются следующие требования. 1. Разряды числа в коде жестко связаны с определенной разрядной сеткой. 2. Для записи знака кода в разрядной сетке отводится фиксированный, строго определенный разряд, т. е. определяется общая длина кода, в котором выделяются цифровые разряды и знаковый (крайний слева) разряд, представляющий знак числа, причем знак «+» кодируется цифрой 0, а знак «-» - цифрой 1. Для представления отрицательных чисел в ЭВМ применяют прямой, обратный и дополнительный коды. Положительные числа представляют в прямом коде. 2
- - 3 Выполнение арифметических операций: сложение; вычитание; умножение. для двоичных чисел в форме : с фиксированной запятой; с плавающей запятой.
Представление чисел в формате с фиксированной запятой Целые числа в компьютере хранятся в памяти в формате с фиксированной запятой. В этом случае каждому разряду ячейки памяти соответствует всегда один и тот же разряд числа, а запятая находится справа после младшего разряда, т. е. вне разрядной сетки. Для хранения целых неотрицательных чисел отводится одна ячейка памяти (8 бит). Например, число A 2 = 10102 будет хранится в ячейке памяти следующим образом: 1 0 1 0 Максимальное значение целого неотрицательного числа достигается в случае, когда во всех ячейках хранятся единицы. Для n-разрядного представления оно будет равно: 2 n - 1 Диапазон изменения целых неотрицательных чисел от 0 до 255. 4
Для хранения целых чисел со знаком отводится две ячейки памяти (16 бит), причем старший (левый) разряд отводится под знак числа (если число положительное, то в знаковый разряд записывается 0, если число отрицательное записывается 1). Представление в компьютере положительных чисел с использованием формата «знак-величина» называется прямым кодом числа. Например, число 200210 = 111110100102 будет представлено в 16 -ти разрядном представлении следующим образом: 0 0 0 1 1 1 0 0 1 0 При представлении целых чисел в n-разрядном представлении со знаком максимальное положительное число (с учетом выделения одного разряда на знак) равно: A = 2 n-1 - 1 A 10 = 215 – 1 = 3276710 5
Для получения дополнительного кода отрицательного числа можно использовать довольно простой алгоритм: 1. Модуль числа записать прямым кодом в n двоичных разрядах; 2. Получить обратный код числа, для этого значения всех бит инвертировать (все единицы заменить на нули и все нули заменить на единицы); 3. К полученному обратному коду прибавить единицу. Пример. Записать дополнительный код отрицательного числа – 2002 для 16 -ти разрядного компьютерного представления с использованием алгоритма. Прямой код |-200210| Обратный код инвертирование прибавление единицы Дополнительный код 6 00000111110100102 11111000001011012 +000000001 2 11111000001011102
Сложение двоичных чисел с фиксированной запятой Операция сложения двух чисел (целых иди дробных) с фиксированной запятой с произвольными знаками может выполняться в ЭВМ: в прямых кодах (для положительных чисел); в обратном или дополнительном кодах (для отрицательных чисел). При алгебраическом сложении чисел с фиксированной запятой положительные числа остаются в прямом коде, а отрицательные числа преобразуются в обратный или дополнительный код. При сложении чисел в ЭВМ используют правила сложения двоичной арифметики: 0+0=0; 1+0=1; 0+1=1; 1+1=10. Знаковый разряд участвует в суммировании как и значащие. При возникновении единицы переноса из знакового разряда для дополнительных кодов, она отбрасывается, а для обратных кодов прибавляется к младшему разряду суммы (циклический перенос). Положительная сумма получается в прямом коде, а отрицательная – в коде представления слагаемых. 7
Переполнение разрядной сетки В результате выполнения операции сложения может получиться результат, превышающий максимально возможное число для заданной разрядной сетки, т. е. происходит выход полученного результата за пределы разрядной сетки в сторону знакового разряда, называемый «переполнением» (значащий разряд становится знаковым, результат операции неверный). Пример 1. Найти сумму (A 1+A 2 ) доп = A 1 доп+ A 2 доп. А 1 доп = 1 01001 (целое десятичное число «-23» ). А 2 доп = 1 01110 (целое десятичное число «-18» ). Суммируем числа в дополнительном коде: + 1 01001 1 01110 0 10111 Единица переноса из знакового разряда игнорируется. Результат машиной ошибочно воспринимается как положительное число. 8
Способы выявления переполнения в арифметических операциях: 1) Анализируются два переноса – из старшего значащего разряда в знаковый (p 1) и из знакового разряда (p 2). Если есть оба переноса или нет ни одного переноса, то переполнения нет, если есть только один из переносов, то имеет место переполнение. Сигнал ( «Останов» ) будет вырабатываться по формуле: 9
Способы выявления переполнения в арифметических операциях: 2) Для представления чисел применяют модифицированный код. На переполнение при сложении двух чисел указывают несовпадение цифр в знаковых разрядах результата. Комбинация 01 соответствует переполнению положительного результата, а комбинация 10 – отрицательного. Пример 2. Найти сумму двух чисел с фиксированной запятой, представленных в дополнительном коде: А 1 доп = 1 01001 (целое десятичное число «– 23» ); А 2 доп = 1 01110 (целое десятичное число «– 18» ). Для приведенного примера суммируем числа в доп. модиф. коде: + 11 01001 11 01110 10 10111. Комбинация « 10» в знаковых разрядах результата является признаком отрицательного переполнения результата. 10
Способы выявления переполнения в арифметических операциях: Пример 3. Найти сумму двух чисел с фиксированной запятой, представленных в дополнительном коде: А 1 доп = 0 01001 ( +23); А 2 доп = 0 01110 (+18). Для приведенного примера суммируем числа в пр. модиф. коде: + 00 10111 00 10010 01 01001. Комбинация « 01» в знаковых разрядах указывает на переполнение положительного результата суммирования. 11
Способы выявления переполнения в арифметических операциях: Результат обеих операций неверный и дальнейшее решение задачи не имеет смысла. ЭВМ вырабатывает сигнал φ = 1 (Останов). Если сигнал φ = 0, то переполнения нет, результат верный и можно продолжить решение задачи. Если обозначить знаковые разряды: младший разряд – зн 1, старший разряд – зн 2, то значение сигнала φ будет вырабатываться по формуле: 12
Алгоритм сложения чисел с фиксированной запятой Алгоритм сложения: 1. Положительные числа остаются без изменения (в прямом коде), отрицательные числа переводятся в дополнительный код. 2. Суммируются полученные коды чисел, включая знаковые разряды. Если имеет место перенос из знакового разряда, он отбрасывается. 3. Анализируется результат (сумма) на переполнение. Если имеет место переполнение, то вырабатывается сигнал φ = 1 и ЭВМ останавливает решение задачи. 4. Если переполнения нет, то анализируется результат по знаковому разряду: 0 – результат в прямом коде, 1 – результат в дополнительном коде. 13
Пример сложения чисел с фиксированной запятой Пример 4. Заданы числа. Выполнить операцию сложения (А 1+ А 2). [A 1]пр = 1 0110, [A 1]доп = 1 1010. [A 2]пр = 1 1001, [A 2]доп = 1 0111. Суммируем [А 1]доп + [А 2]доп: + 1 1010 доп 1 0111 доп 1 0001 доп. Единица переноса из знакового разряда в результате игнорируется. Результат отрицательный и представлен в дополнительном коде. Переполнения нет, так как присутствуют оба анализируемых переноса. Результат: [Aрез]доп = 1 0001; [Aрез]пр = 1 1111. Проверка: (– 6) + (– 9) = (– 15). 14
Вычитание двоичных чисел с фиксированной запятой Операция вычитания чисел (целых или дробных) заменяется суммой: [A 1]пр – [A 2]пр = [A 1]пр + [–A 2]пр. Знак вычитаемого в прямом коде инвертируется. После этого выполняется операция сложения уменьшаемого и вычитаемого по алгоритму с использованием дополнительного кода для представления отрицательных слагаемых. 15
Пример. Выполнить арифметическое действие 300010 - 500010 в 16 -ти разрядном компьютерном представлении. Представим положительное число в прямом, а отрицательное число в дополнительном коде: Десятичное число Прямой код Обратный код Дополнительный код 3000 000010111000 -5000 000100111000 1110110001110111 +000000001 1110110001111000 Сложим прямой код положительного числа с дополнительным кодом отрицательного числа. Получим результат в дополнительном коде: 3000 -5000 1111100000110000 Переведем полученный дополнительный код в десятичное число: 1) Инвертируем дополнительный код: 0000011111001111 2) Прибавим к полученному коду 1 и получим модуль отрицательного числа: 0000011111001111 + 000000001 0000011111010000 3) Переведем в десятичное число и припишем знак отрицательного числа: -2000. 16
Представление чисел в формате с плавающей запятой Вещественные числа (конечные и бесконечные десятичные дроби) хранятся и обрабатываются в компьютере в формате с плавающей запятой. В этом случае положение запятой в записи числа может изменяться. Формат чисел с плавающей запятой базируется на экспоненциальной форме записи, в которой может быть представлено любой число. 17
Представление двоичных чисел с плавающей запятой Число A в форме с плавающей запятой представляется в виде A = mn . qp , где mn – нормализованная мантисса числа A; Р – порядок (характеристика) числа A; q – основание системы счисления. Мантисса mn представляет собой правильную дробь, удовлетворяющую условию q-1 ≤ | mn | < 1. Числа А 1 и А 2 представлены следующим образом: А 1 = m 1. q. Р 1; А 2 = m 2. q. Р 2. Арифметическое сложение или вычитание мантисс двух чисел может быть выполнено только в случае равенства их порядков. 18
Таким образом, в нормализованных числах первая цифра после точки должна быть значащей: Пример. Преобразуйте десятичное число 888, записанное в естественной форме, в экспоненциальную форму с нормализованной мантиссой. 888, 888 = 0, 888888× 103 Нормализованная мантисса m = 0, 888888, порядок n = 3. 19
Для представления чисел в машинном слове выделяют группы разрядов для изображения мантиссы, порядка, знака числа и знака порядка: с плавающей точкой в формате 32 -разрядного слова будет иметь вид 20
Максимальным числом, представимым в формате слова, будет число Числа с плавающей точкой позволяют увеличить диапазон обрабатываемых чисел, но при этом точность их изображения определяется только разрядами мантиссы и уменьшается по сравнению с числами с фиксированной точкой. При записи чисел в формате слова диапазон представимых чисел будет от - 1 -2127 до 1 -2 (2 =10 ), а точность их представления будет определяться мантиссой, состоящей из 23 разрядов. Точность может быть повышена путем увеличения количества разрядов мантиссы. Это реализуется путем представления чисел с так называемой двойной точностью (используется формат двойного слова): 21
Алгоритм сложения двух чисел с плавающей запятой: 22
Нормализация мантиссы 23
Нарушение нормализации мантиссы вправо 24
Нарушение нормализации мантиссы влево Признак нарушения нормализации влево для дополнительных и обратных кодов – это сочетание 01 или 10 в знаковых разрядах модифицированных кодов. Устранение этого нарушения состоит в модифицированном сдвиге мантиссы Мх вправо на 1 разряд и увеличении порядка Рх на единицу. Примеры для доп. и обр. кодов: Мх = 01, 110111, Рх = 00, 101 После нормализации: Мх = 00, 111011 ①*, Рх = 00, 110 Мх = 10, 10011, Рх = 00, 011 После нормализации: Мх = 11, 01001 ①*, Рх = 00, 100 * – разряд, вышедший за пределы разрядной сетки, используется для округления или отбрасывается. 25
26
Умножение двоичных чисел в форме с фиксированной запятой В математике известен метод умножения чисел в столбик. Метод для целых и дробных двоичных чисел. Умножение, начиная с младшего разряда множителя: а) дробные числа б) целые числа 27
Умножение двоичных чисел в форме с фиксированной запятой Умножение, начиная со старшего разряда множителя: а) дробные числа б) целые числа 28
Умножение двоичных чисел в форме с фиксированной запятой 29
Умножение двоичных чисел в форме с фиксированной запятой Приведенные правила (1 -3) позволяют сформулировать алгоритм пошагового вычисления произведения Z путем отыскания на каждом i-ом шаге частичного произведения ЧПi. При этом принимается, что на начальном шаге ЧП 0 = 0. Число шагов определяется количеством числовых разрядов множителя. Общая идея алгоритма заключена в вычислении ЧПi на каждом шаге алгоритма: 30
Умножение двоичных чисел в прямом коде 31
Алгоритм умножения операндов в прямых кодах 32
Пример умножения операндов в прямых кодах Пример 1. Умножение в прямом коде Zпр = Апр * Впр. Апр = 10110 = (– 6)10; Впр = 11101 = (– 13)10. В этом случае перемножаются модули чисел, а произведению присваивается знак «плюс» , если знаки сомножителей одинаковы, или знак «минус» , если знаки разные. |А| =00110; |В| = 01101. Перемножаем числа целые, следовательно произведение должно быть представлено двойной (2 n) разрядностью. 33
Пример умножения операндов в прямых кодах * 001101 00000 – ΣЧП 0; + 00110 – прибавление множимого, разряд множителя равен 1; 0011000000 – ΣЧП 1; 0001100000 – сдвиг вправо на 1 разряд ΣЧП 1; 0000110000 – сдвиг вправо на 1 разряд ΣЧП 2; + 00110 – прибавление множимого, разряд множителя равен 1; 0011110000 – ΣЧП 3; 0001111000 – сдвиг вправо на 1 разряд ΣЧП 3; + 00110 – прибавление множимого, разряд множителя равен 1; 0100111000 – ΣЧП 4; 0010011100 – сдвиг вправо на 1 разряд ΣЧП 4; 0001001110 – дополнительный сдвиг вправо на 1 разряд после умножения на все значащие разряды множителя для правильной постановки результата в формате 2 n разрядов (или умножение на знаковый разряд). |А| =00110; |В| = 01101. 34
Алгоритм умножения операндов в прямых кодах Одновременно с умножением на знаковый разряд определяется знак произведения, как «сумма по модулю 2» знаков сомножителей: Zзнак = 0. Произведение А* В = (0001001110)2 пр = (+1001110)2 = (78)10. Проверка: (– 6)10 * (– 13)10 = (78)10. 35
Алгоритм умножения операндов в дополнительных кодах 36
Алгоритм умножения операндов в дополнительных кодах Следует обратить внимание: 1)слагаемые Слi представляются дополнительным кодом без удвоения количества числовых разрядов, так как младшая часть разрядов всегда нулевое двоичное слово аналогично, как и для прямых кодов; 2)при использовании дополнительных кодов частичное произведение ЧПi получается за счет модифицированного сдвига кода ΣЧПi-1 в отличие от простого (арифметического) сдвига для случая использования прямых кодов. Модифицированный сдвиг заключается в размножении знакового разряда; 3)напомним, что корректирующая поправка вводится только при наличии отрицательного множителя. 37
Пример умножения операндов в дополнительных кодах Пример 2. Умножение в дополнительном коде Zдоп = Адоп * Bдоп. Апр = (+3)10 = 0 011 пр = 0 011 доп = 00 011 мдоп; Bпр = (– 5)10 = 1 101 пр = 1 011 доп = 11 011 мдоп. Так как Bпр<0, то на последнем шаге требуется ввод корректирующей поправки К = [-A]мдоп. Для отыскания коэффициента К необходимо выполнить последовательность преобразований: [A]мпр → [-A]мпр → [-A]мдоп. Таким образом, получается: 00 011 → 11 011 → 11 101. Отсюда К = [-A]мдоп = 11 101. Перемножаем числа целые, следовательно, произведение должно быть представлено двойной (2 n) разрядностью. 38
* 00 011 Пример умножения операндов в дополнительных кодах 00 011 00 000000 – ΣЧП 0; + 00 011 – прибавление множимого, разряд множителя равен 1; 00 011000 – ΣЧП 1; 00 001100 – сдвиг вправо на 1 разряд ΣЧП 1; + 00 011 – прибавление множимого, разряд множителя равен 1; 00 100100 – ΣЧП 2; 00 010010 – сдвиг вправо на 1 разряд ΣЧП 2; 00 001001 – сдвиг вправо на 1 разряд ΣЧП 3; + 11 101 – корректирующая поправка К = [-A]мдоп; 11 110001 – результат умножения Zмдоп. Произведение Амдоп* Вмдоп = (11 110001)доп = (11 001111)пр = (-15)10. Проверка: (+3)10 * (– 5)10 = (-15)10. 39
Умножение и деление операндов с плавающей запятой Числа с плавающей запятой А 1 и А 2 представлены следующим образом: А 1 = m 1. q. Р 1; А 2 = m 2. q. Р 2. Арифметическое умножение чисел с плавающей запятой сводится к умножению мантисс и сложению порядков (как чисел с фиксированной запятой) : А 1. А 2 = [m 1. m 2]; q. Р 1+P 2. Арифметическое деление чисел с плавающей запятой сводится к делению мантисс и вычитанию порядков (как чисел с фиксированной запятой) : А 1 : А 2 = [m 1 : m 2]; q. Р 1 -P 2. 40