KursLek110 (1276646), страница 5
Текст из файла (страница 5)
В обратномкоде нуль имеет два представления: положительный 0.00…0 и отрицательный − 1. ( − 1)( − 1) … ( − 1).Диапазоны представления чисел, представленных в дополнительном и обратномкодах, не совпадают. Представления значения −1 в обратном коде не существует. Поправилам получения кодов нельзя получить представления − −1 в дополнительномкоде, но оно существует.1.9. Сложение чисел со знакомИспользование дополнительного или обратного кодов позволяют избежатьоперации прямого вычитания. Операция вычитания сводится к операции сложениядополнительных или обратных кодов слагаемых. Причем знаковые разряды кодовпринимают участие в сложении наравне со значащими разрядами кодов.
Рассмотримособенности сложения кодов, которые связаны с возникновением переноса иззнакового разряда.Привозникновениипереносаиззнаковогоразрядаприсложениидополнительных кодов он отбрасывается.Пример.Найтисуммучисел1 = −54010и2 = 86010 , используядополнительный код.[x1 ]д = 9.460= 0.8601 ← 0.320↓ отбрасываетсяПри возникновении переноса из знакового разряда при сложении обратныхкодов он прибавляется к младшему разряду полученной суммы. Такой переносназывается циклическим.Пример. Сложить обратные коды двоичных .чисел [x1 ]о = 0.0001101 и[2 ]д =1.1110110.Переносы11 11110.0001101Циклическийперенос+ 1.11101100.000001110.0000100Докажем справедливость правила сложения для дополнительного кода напримере двоичных чисел || < 1.Дополнительный код отрицательного числа посоотношению (1.5) вычисляется как − = + ( − ) − Рассмотрим четыре случая.1) > 0, > 0. Так как результат не должен выходить за разрядную сетку, то присложении и перенос из знакового разряда должен отсутствовать, т.е.
= 0.[]д + []д = + = [ + ]д .2) 0 ≤ < 1, −1 < ≤ 0, || > и −1 < ( + ) ≤ 0.Тогда, исходя из соотношения (1.5) и отношения || > имеем[]д + []д = + ( − ||) < ,а вследствие этого = 0. Отсюда[]д + []д = + + = ( + ) + = [ + ]д ,а это есть дополнительный код отрицательной суммы чисел и .3) 0 ≤ < 1, −1 < ≤ 0, || < и −1 < ( + ) ≤ 0.Тогда, исходя из соотношения (1.5) и отношения || < имеем[]д + []д = + ( − ||) > ,а вследствие этого = 1.
Отсюда[]д + []д = + + − = ( + ) = [ + ]д ,а это есть дополнительный код положительной суммы чисел и .Величина "– " присутствует в выражении вследствие того, что по правилу сложениядополнительных кодов перенос = 1 отбрасывается.4) < 0, < 0. Тогда []д + []д > 1, т.е. = 1. Отсюда[]д + []д = + + + − = ( + ) + = [ + ]д ,а это есть дополнительный код отрицательной суммы чисел и .Справедливость отбрасывания переноса из знакового разряда при еговозникновении при сложении дополнительных кодов доказана.Используяэтусхемудоказательства,можнодоказатьсправедливостьособенности сложения обратных кодов, т.е.
использование циклического переноса.1.10. ПереполнениеВ процессе выполнения арифметических операций над кодами возможнаситуация, когда результат выходит за пределы представления чисел в заданнойразрядной сетке. Такая ситуация называется переполнением.Переполнение может возникнуть при сложении чисел с одинаковыми знаками.При возникновении переполнения дальнейшие вычисления прекращаются.Для двоичной с/с при переполнении происходит смена знака результата. Дляобнаружения переполнения вводят специальный контрольный разряд (КР), которыйпомещается слева от знакового разряда.
В исходных данных значение контрольногоКР Зн.РЗначащие цифрыразряда повторяет значение знакового разряда. Признаком отсутствия переполненияявляется совпадение в результате значений в знаковом и контрольном разрядах, апризнаком переполнения является несовпадение значений знакового и контрольногоразрядов.Определение 11. Коды, содержащие кроме знакового разряда контрольныйразряд, называются модифицированными кодами.
В связи с этим можно говорить омодифицированных прямом, обратном и дополнительном кодах.Пример. Найти сумму двоичных чисел и , используя модифицированныйдополнительный код. Использовать разрядную сетку n, равную 7. = +10111, = +10010Сложим модифицированные дополнительные коды:[]д = 00.10111+[]д = 00.10010_________01.01001Результат идентифицирует переполнение. Если бы не было контрольного разряда, торезультат был бы такой: 1.01001. Т.е. при сложении положительных чисел полученотрицательный результат.Пример.
Найти сумму двоичных чисел и , используя модифицированныйобратный код: = −10101, = −01101Сложим модифицированные обратные коды:[]о = 11.01010+[]о = 11.10010_________10.11100Результат идентифицирует переполнение. Если бы не было контрольного разряда, торезультат был бы такой: 0.11100. Т.е. при сложении отрицательных чисел полученположительный результат.1.11. Операция сдвигаОперациясдвигачиславлевоиливправоширокоиспользуетсяввычислительной технике. Дальнейшие рассуждение опираются на двоичную с/с.Сдвиг двоичного числа влево на k разрядов эквивалентно умножению его на 2 .← = × 2Сдвиг двоичного числа вправо на k разрядов эквивалентно делению его на 2 .→ = × 2−Пусть значения находятся в диапазоне 0 ≤ ||<1|. Сдвиг дополнительного кодаотрицательного двоичного числа вправо на k разрядов означает преобразование егокода[]д = 2 + в код[ × 2− ]д = 2 + × 2−(1.8)Но, если выполнить операцию сдвига дополнительного кода отрицательногодвоичного числа вправо на k разрядов с заполнением освободившихся разрядовнулями, то получится код[]д × 2− = (2 + ) × 2− = 2−+1 + × 2−(1.9)Код (1.8) превышает код (1.9) на величину[ × 2− ]д − []д × 2− = 2 − 2−+1 = 2 − 2−(−1)(1.10)Код (1.9) можно преобразовать в код (1.8), заполнив единицами старшиеразряды,которыеосвободилисьприсдвиге[]двправо.Действительно,последовательность единиц, начиная от знакового разряда и заканчивая – ( − 1)разрядом, равна поправке (1.10), которую надо добавить к (1.9) для преобразованияего в (1.8).При сдвиге вправо кода двоичного числа освободившиеся старшие значащиеразряды заполняются: нулями для кодов положительных чисел; единицами для кодов отрицательных чисел.При сдвиге влево кода двоичного числа освободившиеся младшие значащиеразряды заполняются: нулями для кодов положительных чисел и для дополнительных кодовотрицательных чисел; единицами для обратных кодов отрицательных чисел.Пример.
Задано двоичное отрицательное число = -100110101. Представить егообратном модифицированном коде и сдвинуть на 3 разряда вправо. Допущение:разрядная сетка позволяет делать эту операцию без потери значащих разрядов.[]о =11.011001010;3→[]о = 11.111011001010.Здесь освободившиеся при сдвиге вправо на три разряда три старших разрядарезультата заполняются значением 1..