Вычитание большого двоичного числа без знака из меньшего - PullRequest
11 голосов
/ 02 марта 2012

Я учусь на компьютерном курсе организации и ассемблере. У письменной части нашей лаборатории на этой неделе есть вопрос, который поставил меня в тупик. Вопрос гласит ...

Вычтите следующие двоичные числа без знака (покажите биты заимствования и переполнения). Не конвертируйте в два дополнения.

 0101 0111 1101
-1110 1011 0110
 --------------

Я понимаю, что ответом является -1001 0011 1001 , но я с трудом пытаюсь выяснить, как взять кредит, чтобы на самом деле выполнить это вычитание, беря большее число и вычитая его из меньшего номер и показать мою работу. Всю свою жизнь, вычитая большое число из небольшого, я перевернул проблему и вместо этого вычел меньшее число из большего числа и добавил отрицательный знак перед результатом. Я спросил профессора, и он говорит, что хочет, чтобы проблема была решена так, как она написана. Мне не разрешают решить эту проблему, вычитая меньшее число из большего числа и отрицая, как обычно. Мне не удалось найти в сети примеров вычитания большего двоичного числа без знака из меньшего.

Я был бы очень признателен, если бы кто-нибудь мог описать мне, как выполнить вычитание в этом сценарии.

Обновление: @ Алекс правильно. Профессор искал

0110 1100 0111 (1735)

Спасибо всем.

Ответы [ 2 ]

8 голосов
/ 02 марта 2012

Вы делаете это одинаково, независимо от того, какое число больше, а какое меньше.

 bb b      bb   <- borrows
 0101 0111 1101 (1405)
-1110 1011 0110 (3766)
 --------------
 0110 1100 0111 (1735?)

Теперь, если вам нужна правильная разница, вам нужно учесть переполнение, так как приведенный выше результат не включает бит знака:

 b bb b      bb   <- borrows
 0 0101 0111 1101 (1405)
-0 1110 1011 0110 (3766)
 ----------------
 1 0110 1100 0111 (-2361 signed 2's complement)

Действительно, процессору все равно, что из чего вычитается. Он использует один и тот же алгоритм для сложения / вычитания целых чисел, более того, этот алгоритм одинаков для целых чисел со знаком и без знака. Вам нужно только правильно интерпретировать результат и флаги переноса и переполнения. Вот и все.

0 голосов
/ 13 января 2017

просто вычтите два двоичных числа, как они есть, а затем возьмите 2-е дополнение к результату. вуаля!

...