![]() |
Звоните! (926)274-88-54 Бесплатная доставка. Бесплатная сборка. |
Ассортимент тканей График работы: Ежедневно. С 8-00 до 20-00. Почта: soft_hous@mail.ru |
![]() ![]() ![]() |
Читальный зал --> Программные средства foundation +1 10001 -1 1111 1 - с 1 +3 ООП ООП -3 П01 1101 - -4 - 1100 + ООП 4 1100 + ООП +7 0111 +1 10001 Переполнение при вычитании можно обнаружить по тому же правилу, что и при сложении, проверяя знаки уменьшаемого и обратного кода вычитаемого. Или, как это видно из приведенных примеров, мы можем сравнить перенос в знаковый разряд с переносом из него: переполнение обнаруживается по тому же правилу, что и при сложении, независимо от знаков исходных чисел, участвующих в операции вычитания, и знака результата. При попытке изменить знак у лишнего отрицательного числа возникает переполнение; согласно сформулированным правилам это произойдет в результате прибавления 1 при взятии точного дополнения: -(-8) = -1000= 0111 + 0(Ю1 lOOO = -8 Однако это число все же может участвовать в сложении и вычитании, пока окончательный результат операции остается внутри диапазона представимых чисел: Существует замечательное правило обнаружения переполнения {overflow rule) при сложении: сложение приводит к переполнению, если знаки слагаемых одинаковы, а знак суммы отличается от знака слагаемых. Это правило иногда формулируют в терминах переносов, возникающих при выполнении операции сложения: переполнение наступает, если бит переноса в знаковый разряд с и бит переноса из него с различны. Внимательное рассмотрение приведенной ранее табл. 2.3 показывает, что эти два правила эквивалентны: имеются только два случая, когда с с, и это те два случая, в которых л: =>, а бит суммы имеет другое значение. 2.6.4. Правила вычитания Числа, представленньЕе в дополнительном коде, могут участвовать в вычитании как обычные двоичные числа без знака, и для них можно сформулировать соответствующие правила обнаружения переполнения. Однако в большинстве случаев схемы, предназначенные для вычитания чисел в дополнительном коде {twos-complement subtraction), не выполняют эту операцию непосредственно. Чаще всего в них осуществляется изменение знака у вычитаемого путем взятия его точного дополнения, а затем оно складывается с уменьшаемьЕм по обычным правилам сложения. Изменение знака у вычитаемого и сложение с уменьшаемым можно следующим образом вьЕполнить в одной единственной операции сложения: берем поразрядное дополнение вычитаемого и складываем его с уменьшаемым, полагая значение переноса в младший разряд (с) равным 1, а не 0. Приведем примеры: 1 - с. 1 - с. +4 0100 0100 +3 ООП ООП - +3 -ООП + 1100 - +4 - 0100 + 1011 1 - с 44 0100 + -8 + 1000 1100 -3 -8 +5 1101 1101 1000 + 0111 lOlOl 2.6.5. Дополнительный код и двоичные числа без знака Поскольку числа, представленные в дополнительном коде, складываются и вычитаются по тем же самым основным алгоритмам двоичного сложения и вычитания, что и числа без знака той же длины, компьютер или какая-либо другая цифровая система могут использовать один и тот же сумматор для обработки чисел обоих типов. Однако результат должен интерпретироваться по-разному в зависимости от того, с чем имеет дело система: с числами со знаком (то есть с числами из интервала от -8 до +7; signed numbers) или с числами без знака (из интервала от О до 15; unsigned numbers). Выше нарис. 2.3 мы представили систему 4-разрядных двоичных чисел в дополнительном коде графически. Подобные построения можно выполнить и для 4-разрядных двоичных чисел без знака, как это сделано на рис. 2.4. Комбинации битов расположены в тех же местах по окружности, а прибавление и отнимание того или иного числа, как и ранее, достигается поворотом указателя на соответствующее число позиций по часовой стрелке или против нее. Вычитание ![]() Сложение 1001 1000 0111 Рис. 2.4. Представление счета по модулю для 4-разрядных двоичных чисел без знака Легко видеть, что выход за пределы диапазона представимых чисел при сложении происходит в том случае, когда указатель, вращаясь по часовой стрелке, проходит через разрыв между 15 и 0. Говорят, что при этом возникает перенос {carry) из старшего разряда. Аналогично, при вычитании мы выходим за пределы диапазона представимых чисел, если указатель в результате вращения против часовой стрелки проходит 2.7. Сложение и вычитание двоичных чисел в обратном коде 69 через этот разрыв. В этом случае говорят, что в старшем разряде возникает потребность заема {borrow). Из рис. 2.4 следует также, что вычитание числа без знака, равного и, можно осуществить, повернув указатель по часовой стрелке на 1 б - и позиций. Это эквивалентно сложению с точным дополнением числа п. При вычитании заем возникает, если соответствующее сложение с точным дополнением не приводит к переносу. Таким образом, перенос или заем, возникающие при сложении чисел без знака, указывают на то, что результат не укладывается в диапазон представимых чисел. При сложении чисел со знаком в дополнительном коде на тот же факт указывает обсуждавшееся нами выше переполнение. Думать о переносе при сложении чисел со знаком излишне в том смысле, что переполнение может наступать или не наступать независимо от того, происходит перенос или нет. *2.7. Сложение и вычитание двоичных чисел в обратном коде Взглянем еще раз на табл. 2.6; это поможет нам объяснить правило сложения двоичных чисел, представленных в обратном коде. Если начать с числа 1000 (-7,о) и считать в прямом направлении, то каждое следующее число будет получаться из предыдущего в результате добавления 1, за исключением перехода от НП (отрицательный 0) к 0001 (+1,(,). При достижении числа 1111 мы должны для продолжения правильного счета прибавить 2, а не 1. Из этого следует алгоритм сложения двоичных чисел в обратном коде: следует выполнять стандартное двоичное сложение, но добавлять еще одну 1 при переходе через 1111. Достижение значения ИП при сложении можно обнаружить, следя за переносом из знакового разряда. Таким образом, правило сложения двоичных чисел в обратном коде {ones -complement addition) можно сформулировать совсем просто: Выполняется стандартное двоичное сложение; если возникает перенос из знакового разряда, то к результату прибавляется 1. Это правило часто называют циклическим переносом {end-around carry). Ниже приведены примеры сложения в обратном коде; в последних трех примерах производится циклический перенос:
Если следовать сформулированному алгоритму, осуществляемому в два шага, то в результате сложения числа с его обратным кодом получается отрицательный ООО «Мягкий Дом» - это Отечественный производитель мебели. Наша профильная продукция - это диваны еврокнижка. Каждый диван можем изготовить в соответствии с Вашими пожеланияи (размер, ткань и материал). Осуществляем бесплатную доставку и сборку. Звоните! Ежедневно! (926)274-88-54 Продажа и изготовление мебели. Копирование контента сайта запрещено. Авторские права защищаются адвокатской коллегией г. Москвы. |