Электроника:Цифровая электроника/Двоичная арифметика/Двоичное вычитание

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску

Перевод: Макаров В. (valemak) Контакты:</br>* Habr: @vakemak</br>* Сайт: www.valemak.com</br>Перевёл статей: 648.
Проверка/Оформление/Редактирование: Мякишев Е.А.


Двоичное вычитание[1]

Мы, само собой, можем вычесть одно двоичное число из другого, используя адаптированные стандартные методы для десятеричных чисел (т.е. вычитая в столбик – производя вычитание каждой пары битов справа-налево, «заимствуя» по мере необходимости из битов левее). Однако, если бы мы вместо вычитания использовали уже знакомую (и более простую) технику двоичного сложения, это было бы предпочтительнее.

Как мы выяснили в предыдущем разделе, можно представлять отрицательные двоичные числа, используя метод «дополнения до двух» и экстрабит для указания отрицательного разряда. Мы будем использовать эти отрицательные двоичные числа для вычитания путем сложения. Вот пример задачи, которую нужно выполнить:

Вычитание: 710 - 510
Эквивалентное сложение: 710 + (-510)

Если всё, что нам нужно сделать, это представить в двоичной форме семёрку и отрицательную пятёрку (с дополнением до двух), то нам хватит всего трёх битов для, собственно, самих величин + экстрабит для отрицательного веса:

Положительное «семь» = 01112
Отрицательное «пять» = 10112

Теперь давайте оба числа сложим «столбиком»:

Рис. 1. Складываем столбиком двоичные 100111 и 010010.
Рис. 1. Складываем столбиком двоичные 100111 и 010010.

Отбросим «лишний» пятый бит, получаем ответ: 00102

Поскольку мы уже определили наше числовое битовое поле как «три бита + экстрабит отрицательного веса» (т.е. всего 4 бита), тогда пятый бит нужно отбросить, что даст результат 00102 (или положительные 210), что и является правильным ответом.

Если непонятно, почему мы отбрасываем этот лишний пятый бит, можно вспомнить, что крайний левый бит младшего числа имеет отрицательный вес, в данном случае он равен отрицательной восьмёрке.

Когда мы складываем эти два двоичных числа вместе, то, что мы это фактически делаем с MSB – вычитаем MSB нижнего числа из MSB верхнего числа. При вычитании никто никогда не «переносит» цифру или бит на следующий левый весовой коэффициент.

Давайте выполним другой пример, на этот раз с бо́льшими (в абсолютном значении) числами. Сложим -2510 и 1810. Для начала определимся, насколько большим должно быть наше двоичное битовое поле.

Чтобы представить наибольшее (по модулю) число в нашей задаче, то есть двадцать пять, нам нужно как минимум пять бит, и кроме того нужен шестой экстрабит для отрицательного веса. Давайте начнём с того, что представим положительные двадцать пять в двоичном виде, затем найдём дополнение до двух и объединим всё это в одну нумерацию:

+2510 = 0110012 (показаны все 6 бит)

Инвертируем (дополняем до единицы): 0110012 → 1001102.

Дополняем до двух: 1001102 + 0000012 = 1001112.

Итак, -2510 = 1001112.

Фактически, мы представляем отрицательные двадцать пять, используя шестой бит (экстрабит) обозначающий отрицательные тридцать два плюс положительные семь (710 = 1112). Второе число в двоичный вид привести проще: 1810 = 0100102.

Ну что ж, складываем «столбиком» оба числа в двоичной форме, смотрим, что получается:

Рис. 2. Складываем столбиком двоичные 100111 и 010010.
Рис. 2. Складываем столбиком двоичные 100111 и 010010.

Поскольку слева не было «лишних» битов (ответ тоже 6-битный), то нет и битов, которые нужно отбрасывать. Крайний левый экстрабит равен 1, что означает, что ответ отрицательный (в форме дополнения до двух), как и должно быть. Преобразуя ответ в десятеричную форму, суммируя все биты, умноженные на их соответствующие значения веса, получаем:

(1 × -3210) + (1 × 1610) + (1 × 810) + (0 × 410) + (0 × 210) + (1 × 110) = -3210 + 2510 = -710.

И правда, -710 – это и есть сумма -2510 + 1810.

См.также

Внешние ссылки