Представление чисел в форме с плавающей запятой не требует масштабирования переменных и является основным для решения широкого круга задач.
В ЭВМ с целью упрощения арифметических операций применяются специальные коды для представления чисел. При помощи этих кодов
упрощается определения знака результата операции, операция вычитания или алгебраического сложения чисел сводится к арифметическому сложению их
кодов облегчается выработка признаков переполнения разрядной сетки. В результате упрощаются устройства ЭВМ, выполняющие арифметические
операции, Для представления чисел в ЭВМ применяют прямой, обратный и дополнительные коды.
Положительные числа представляются в ЭВМ в прямом коде. Прямым кодом числа А называется само это число, записанное с единицей в знаковом разряде, если оно отрицательно, и с нулем, если положительно. Например, прямым кодом числа А= +10011 будет 110011.
Для представления отрицательных чисел в ЭВМ применяют прямой, обратный и дополнительный коды. Для получения обратного кода числа А надо все единицы числа А заменит на нули,, а все нули числа А заменить на 1, т.е. произвести инверсию. В знаковом разряде поставить нуль, если число положительное» и единицу, если число отрицательное; А= -
10011, Аобр=101100,
Для получения дополнительного кода числа А надо все
нули числа А заменить единицами, единицы - нулями и к младшему знаковому разряду прибавить единицу: А= -10011, Адоп=101101.
Модифицированный прямой, обратный и дополнительный коды отличаются от побочных кодов только выделением двух разрядов для кодирования знака числа например:
А= +10101, Аобр==0001010, Адоп.=0001011.
Выделение под знак двух разрядов позволяет фиксировать переполнение в ЭВМ, которое заключается в том, что результат сложения, например, двух n
разрядных чисел будет иметь n +1 разрядов. Поскольку машина оперирует
только с n-разрядными числами, то N+1 разряд теряется и результат получается неверным. Использование модифицированных кодов позволяет установить факт переполнения.
При алгебраическом сложении двух двоичных чисел с использованием обратного кода, положительные слагаемые представляются в прямом коде, а
отрицательные - в обратном порядке п производится арифметическое суммирование этих кодов, включая разряды знаков, которые при этом
рассматриваются как старшие разряды. При возникновении переноса из разряда знака единица переноса прибавляется к младшему разряду суммы кодов.
При алгебраическом сложении двух двоичных чисел с использованием дополнительного кода при возникновении переноса из разряда знака единица
переноса отбрасывается.
В результате получается алгебраическая сумма в прямом коде, если эта сумма положительная, и в обратном коде если она отрицательна.
Правило обнаружения переполнения. При алгебраическом сложении - (вычитании) двух двоичных чисел с использованием
прямого кода для представления положительных и дополнительного (обратного) кода для представления отрицательных чисел признаком переполнения является наличие переноса в знаковый разряд суммы при отсутствии переноса из еѐ знакового разряда (положительное переполнение) или наличие переноса из знакового разряда суммы при отсутствии переноса в ее знаковый разряд. (отрицательное переполнение). Если и в знаковый и из знакового разряды суммы одновременно есть переносы или их нет, то переполнение отсутствует. В случае положительного переполнения результат операции положительный, а в случае отрицательного переполнения - отрицательный.
Пример 1,
А1=1011, А2=1101, найти А1+А2.
Числа А1, А2 - положительные, значит эти числа складываются в прямом коде:
А1пр.=1011,А2пр=001101
+001011
001101
---------------
011000
Результат сложения имеет положительное переполнение - наличие единицы переноса в знаковый разряд и отсутствие переноса из знакового разряда.
Пример 2.
А1=1011, А2= -1001, найти А1+А2
Положительное число А1 складывается в прямом коде, отрицательное А2 - в обратном или дополнительном.
+А1пр = 001011 |
+А1пр = |
001011 |
|
А2пр = 010110 |
А2доп = |
010111 |
|
----------------------- |
----------------- |
------- |
|
100001 → 000010 |
100010 → |
000010 |
|
первая единица прибавляется к |
|
первая единица отбрасываразряду |
|
ется к младшему |
|
При сложении чисел А1 и А2 переполнение отсутствует, так как имеется наличие единицы переноса и в знаковый разряд, и из знакового разряда. При выполнении операций в обратном коде единица переноса ни знакового разряда суммируется с младшим разрядом суммы, а поскольку на месте знакового разряда остается 0, то получившаяся сумма положительна. При суммировании в дополнительном коде единица переноса из знакового разряда отбрасывается. Полученная сумма находится в прямом коде.
Пример 3.
А1= -1011, А2=1001,найти А1+А2
+А1обр= -010100 |
+А1доп. = |
010101 |
|
А2пр= 001001 |
А2доп. = |
|
010111 |
|
|
----------------------- |
---------------------- |
|
--- |
|
|
101010 |
001011 |
101100 |
001100 |
|
|
первая единица прибавляется |
первая единица |
|
отбрасывается |
|
|
к младшему разряду |
|
|
При сложении А1и А2 переполнение отсутствует и признаком этого является отсутстствие единицы переноса в знаковый разряд и из знакового разряда.
Получившаяся сумма отрицательна и записана в обратном (дополнительном) кодах.
Пример 4.
А1 = -1011, А2 = - 1001, найти А1+А2.
+А1обр.= 010100 |
+А1доп.= |
|
010101 |
|
|
А2обр.=010110 |
А2доп.= |
|
010111 |
|
|
------------------------ |
--------------------- |
|
-- |
|
|
101010 |
001011 |
101100 |
001100 |
|
|
первая единица прибавляется |
первая единица |
|
отбрасывается |
|
|
к младшему разряду |
|
|