Читайте также:
|
|
Дополнительный код. Представление положительных и отрицательных чисел.
Дополнительный — наиболее распространённый способ представления отрицательных целых чисел в компьютерах. Он позволяет заменить операцию вычитания на операцию сложения и сделать операции сложения и вычитания одинаковыми для знаковых и беззнаковых чисел, чем упрощает архитектуру ЭВМ. Дополнительный код отрицательного числа можно получить инвертированием модуля двоичного числа (первое дополнение) и прибавлением к инверсии единицы (второе дополнение), либо вычитанием числа из нуля.
Дополнительный код положительного числа совпадает с его прямым кодом. Прямой код целого числа может быть получен следующим образом: число переводится в двоичную систему счисления, а затем его двоичную запись слева дополняют таким количеством незначащих нулей, сколько требует тип данных, к которому принадлежит число.
Например, если число 37(10) = 100101(2) объявлено величиной типа Integer (шестнадцатибитовое со знаком), то его прямым кодом будет 0000000000100101, а если величиной типа LongInt (тридцатидвухбитовое со знаком), то его прямой код будет 00000000000000000000000000100101. Для более компактной записи чаще используют шестнадцатеричное представление кода. Полученные коды можно переписать соответственно как 0025(16) и 00000025(16).
Дополнительный код целого отрицательного числа может быть получен по следующему алгоритму:
записать прямой код модуля числа;
инвертировать его (заменить единицы нулями, нули — единицами);
прибавить к инверсному коду единицу.
Например, запишем дополнительный код числа -37, интерпретируя его как величину типа LongInt (тридцатидвухбитовое со знаком):
прямой код числа 37 есть 00000000000000000000000000100101;
инверсный код 11111111111111111111111111011010;
дополнительный код 11111111111111111111111111011011 или FFFFFFDB(16).
Модифицированные коды. Представление положительных и отрицательных чисел.
Правила сложения двоичных чисел с фиксированной точкой.
Сложение чисел выполняется с использованием обратного или дополнительного кодов.
Порядок сложения чисел:
1. Числа записываются в обратном или дополнительном коде.
2. Числа должны иметь одинаковое кол-во разрядов.
3. Сложение чисел выполняется поразрядно; 0+0=0; 0+1=1; 1+0=1; 1+1=10.
4. Знаковые разряды участвуют в сложении
5. Сумма чисел получается в том же коде, в котором представлены слагаемые.
6. Если возник перенос из знакового разряда, то:
-при сложении в доп.коде перенос теряется;
-при сложении в обратном коде единица переноса прибавляется к младшему разряду
Пример: А10 =-23 В10= 36
А2=-10111=-010111 А2пк=1.010111
В2=100100=100100 В2пк=0.100100
А2ок=1.101000
В2ок=0.100100
10.001100
(А+В)2ок=0.001101 (А+В)2дк=0.001101
(А+В)2пк=0.001101 (А+В)2ок=0.001101
(А+В)2=+001101=+13 (А+В)2=+001101=+13
А=-23 Апк=1.23 Аок=1.76
В=36 Впк=0.36 Вок= 0.36
10.12 – (А+В)ок=0.13=А+В=+13.
Сложение двоичных чисел с использованием обратного кода(дополнительного кода).
При алгебраическом сложении двух двоичных чисел с использованием обратного кода положительные слагаемые представляются в прямом коде, а отрицательные - в обратном и производится арифметическое суммирование этих кодов, включая разряды знаков, которые при этом рассматриваются как разряды целых единиц. При возникновении переноса из разряда знака единица переноса прибавляется к младшему разряду суммы кодов (такой перенос называется круговым или циклическим). В результате получается алгебраическая сумма в прямом коде, если эта сумма положительна, и в обратном коде, если она отрицательна.
При сложении чисел в дополнительном коде единица переноса из старшего разряда игнорируется (теряется), а в обратном коде эту единицу надо прибавить к младшему разряду результата.
Пример: Сложить числа +12 и -5.
а) В обратном коде
Десятичная форма | Двоичная форма | Прямой код | Обратный код |
+12 | +1100 | ||
-5 | -101 |
Выполним сложение:
+ | |||||||||
+ | |||||||||
Результат в обратном коде – 00000111. Поскольку знаковый разряд равен 0, результат положительный, и, следовательно, запись кода числа совпадает с записью прямого кода. Теперь можно восстановить алгебраическую запись результата. Он равен +111 (незначащие нули отброшены), или в десятичной форме +7. Проверка (+12-5=+7) показывает, что результат верный.
б) В дополнительном коде
Десятичная форма | Двоичная форма | Прямой код | Обратный код | Дополнительный код |
+12 | +1100 | |||
-5 | -101 |
Выполним сложение в дополнительном коде:
+ | |||||||||
Результат в дополнительном коде – 00000111. Поскольку знаковый разряд равен 0, результат положительный. Теперь можно восстановить алгебраическую запись результата. Он равен +111 (незначащие нули отброшены), или в десятичной форме +7. Проверка (+12-5=+7) показывает, что результат верный.
Умножение и деление двоичных чисел производится в ЭВМ в прямом коде, а знаки их используются лишь для определения знака результата.
28.29. Сложение двоичных чисел с использованием модифицированного обратного кода(дополнительного кода).
Модифицированные обратные и дополнительные коды двоичных чисел отличаются соответственно от обратных и дополнительных кодов удвоением значений знаковых разрядов. Знак «+» в этих кодах кодируется двумя нулевыми знаковыми разрядами, а знак «-» — двумя единичными разрядами.
Целью введения модифицированных кодов являются фиксация и обнаружение случаев получения неправильного результата, когда значение результата превышает максимально возможный результат в отведенной разрядной сетке машины. В этом случае перенос из значащего разряда может исказить значение младшего знакового разряда. Значение знаковых разрядов «01» свидетельствует о положительном переполнении разрядной сетки, а «10» — об отрицательном переполнении. В настоящее время практически во всех моделях ЭВМ роль удвоенных разрядов для фиксации переполнения разрядной сетки играют переносы, идущие в знаковый и из знакового разряда.
При выполнении арифметических действий над двоичными числами эти два знака позволяют легко определить переполнение разрядной сетки. Если содержимое этих двух разрядов совпадает, то значит переполнение отсутствует. В противном случае в компьютере вырабатывается управляющий сигнал (сигнал переполнения) либо на останов компьютера, либо на устранение переполнения разрядной сетки.
Примеры.
1) Сложить два числа в модифицированном коде:
X = 00. 01012, Y = 00. 00112, X + Y = 510 + 310 = 810
00. 0101
+ 00. 0011
00. 1000 = 810
2) Сложить X = -510 = -01012 = 11. 0101, Y = -810 = -10002 = 11. 1000
X + Y = -1310
11. 1011
+ 11. 1000
1 11. 0011 = -1310
3) Сложить X = 0,1101, Y = 0,1101, X + Y = 2610
00. 1101
+ 00. 1101
01. 1010 различные знаковые разряды свидетельствуют о переполнении разрядной сетки.
4) -8 - 8 = 0
11. 1000
+ 11. 1000
1 11. 0000.
Дата добавления: 2015-01-30; просмотров: 334 | Поможем написать вашу работу | Нарушение авторских прав |