Пример вычитания двоичных положительных чисел сервисом www.reshinfo.com:
машинный метод
Ваша задача будет решена с вашими исходными данными OnLine и бесплатно
Задача:Вычесть из числа A = 501410 число B = 23710 в двоичной системе счисления.
Решение:
Для выполнения операции вычитания В из A достаточно выполнить сложение A с числом противоположным В, т.е. взятым с противоположным знаком. Осуществим, это в несколько этапов.
1) Сформируем число В1 противопроложное В, т.е. В1 = -В.
В нашем случае В1 = -23710.
2) Переведем числа в двоичную систему счисления:
A = 501410 = 10011100101102
B1 = -23710 = -111011012
3) Впишем число A в 16-ти разрядный регистр, начиная с младших разрядов (нумерация разрядов начинается с нуля). В недостающие разряды записываем нули.
Разр. | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
A | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 1 | 1 | 0 | 0 | 1 | 0 | 1 | 1 | 0 |
4) Впишем число В1 в 16-ти разрядный регистр, начиная с младших разрядов. В недостающие разряды записываем нули.
Разр. | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
B1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 0 | 1 | 1 | 0 | 1 |
4.1) Вначале получим обратный код. Для этого просто проинвертируем каждый разряд регистра (заменим "0" на "1", а "1" на "0").
Разр. | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
Bобр | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 |
Разр. | c | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
Bобр | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | |
+ | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | |
Bдоп | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 1 |
Обратите внимание! Поскольку мы используем знаковую модель чисел, у нас 15-й разряд является знаковым разрядом и хранит знак числа. при этом "0" соответствует знаку "+" (число положительное), а "1" соответствует знаку "-" (число отрицательное). При этом старшим разрядом для чисел является 14-й разряд.
5) Сложим поразрядно числа A и Bдоп записывая результат в С начиная с младших разрядов.
Правила поразрядного сложения, для двоичной системы счисления несложно вывести, рассуждая следующим образом.
Если соответствующие разряды обоих слагаемых содержат нули, то и сумма ноль. В тот же разряд числа С ставим ноль.
Если в соответствующих разрядах только одно из слагаемых содержит единицу, то и сумма единица. В тот же разряд числа С ставим единицу.
Если соответствующие разряды обоих слагаемых содержат единицы, то сумма двух единиц дает число два, которое в двоичной системе отображается
как 102, т.е. это уже двухразрядное число с нулем в младшем разряде.
Поэтому в тот же разряд числа С ставим ноль, а единицу переносим в следующий разряд.
В общем случае при вычислении значений каждого разряда (кроме нулевого), следует учитывать возможную единицу переноса из предыдущего разряда.
Полный набор правил двоичного поразрядного сложения представлен в таблице.
Перенос из предыдущего разряда Oi-1 |
Ai | Bi | Ci | Перенос в следующий разряд Oi-1 |
0 | 0 | 0 | ||
0 | 1 | 1 | ||
1 | 0 | 1 | ||
1 | 1 | 0 | 1 | |
1 | 0 | 0 | 1 | |
1 | 0 | 1 | 0 | 1 |
1 | 1 | 0 | 0 | 1 |
1 | 1 | 1 | 1 | 1 |
Весь процесс сложения наших чисел выглядит следующим образом:
(красным шрифтом показаны переносы в соответствующий разряд)
Разр. | c | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | |||||||
A | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 1 | 1 | 0 | 0 | 1 | 0 | 1 | 1 | 0 | |
Bдоп | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 1 | |
C | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 0 | 1 |
Обратите внимание! Знаковые разряды участвуют в операции сложения наравне со всеми остальными разрядами.
6) Анализируем переполнение разрядной сетки. Для этого смотрим переносы в знаковый разряд и из знакового (в разряд "с"). Если они имеют одинаковый статус (оба есть или обоих нет), то все нормально переполнения нет. В нашем случае статус переносов одинаковый, результат операции корректен. В регистре "C" содержится сумма исходных чисел
7) Анализируем знак результата (15-й разряд). В нашем случае это "0", значит результат есть число положительное и следовательно представлено в прямом коде.
Ответ:
10011100101102 - 111011012
= 10010101010012
или в десятичной системе счисления:
501410 - 23710
= 477710
...вычесть MOИ чиcла в двоичной системе
...см.пример вычитания ручным методом
...к списку решаемых задач