Электроника:Цифровая электроника/Двоичная арифметика/Двоичное вычитание: различия между версиями
Valemak (обсуждение | вклад) Нет описания правки |
Valemak (обсуждение | вклад) Нет описания правки |
||
Строка 38: | Строка 38: | ||
Чтобы представить наибольшее (по модулю) число в нашей задаче, то есть двадцать пять, нам нужно как минимум пять бит, и кроме того нужен шестой экстрабит для отрицательного веса. Давайте начнём с того, что представим положительные двадцать пять в двоичном виде, затем найдём дополнение до двух и объединим всё это в одну нумерацию: | Чтобы представить наибольшее (по модулю) число в нашей задаче, то есть двадцать пять, нам нужно как минимум пять бит, и кроме того нужен шестой экстрабит для отрицательного веса. Давайте начнём с того, что представим положительные двадцать пять в двоичном виде, затем найдём дополнение до двух и объединим всё это в одну нумерацию: | ||
+25<sub>10</sub> = 011001<sub>2</sub> (показаны все 6 бит) | {| class="wikitable" | ||
|- | |||
| +25<sub>10</sub> = 011001<sub>2</sub> (показаны все 6 бит) | |||
|} | |||
Инвертируем (дополняем до единицы): 011001<sub>2</sub> → 100110<sub>2</sub>. | Инвертируем (дополняем до единицы): 011001<sub>2</sub> → 100110<sub>2</sub>. |
Версия от 05:17, 5 ноября 2021
Двоичное вычитание[1]
Мы, само собой, можем вычесть одно двоичное число из другого, используя адаптированные стандартные методы для десятеричных чисел (т.е. вычитая в столбик – производя вычитание каждой пары битов справа-налево, «заимствуя» по мере необходимости из битов левее). Однако, если бы мы вместо вычитания использовали уже знакомую (и более простую) технику двоичного сложения, это было бы предпочтительнее.
Как мы выяснили в предыдущем разделе, можно представлять отрицательные двоичные числа, используя метод «дополнения до двух» и экстрабит для указания отрицательного разряда. Мы будем использовать эти отрицательные двоичные числа для вычитания путем сложения. Вот пример задачи, которую нужно выполнить:
Вычитание: 710 - 510 Эквивалентное сложение: 710 + (-510) |
Если всё, что нам нужно сделать, это представить в двоичной форме семёрку и отрицательную пятёрку (с дополнением до двух), то нам хватит всего трёх битов для, собственно, самих величин + экстрабит для отрицательного веса:
Положительное «семь» = 01112 Отрицательное «пять» = 10112 |
Теперь давайте оба числа сложим «столбиком»:
Отбросим «лишний» пятый бит, получаем ответ: 00102
Поскольку мы уже определили наше числовое битовое поле как «три бита + экстрабит отрицательного веса» (т.е. всего 4 бита), тогда пятый бит нужно отбросить, что даст результат 00102 (или положительные 210), что и является правильным ответом.
Если непонятно, почему мы отбрасываем этот лишний пятый бит, можно вспомнить, что крайний левый бит младшего числа имеет отрицательный вес, в данном случае он равен отрицательной восьмёрке.
Когда мы складываем эти два двоичных числа вместе, то, что мы это фактически делаем с MSB – вычитаем MSB нижнего числа из MSB верхнего числа. При вычитании никто никогда не «переносит» цифру или бит на следующий левый весовой коэффициент.
Давайте выполним другой пример, на этот раз с бо́льшими (в абсолютном значении) числами. Сложим -2510 и 1810. Для начала определимся, насколько большим должно быть наше двоичное битовое поле.
Чтобы представить наибольшее (по модулю) число в нашей задаче, то есть двадцать пять, нам нужно как минимум пять бит, и кроме того нужен шестой экстрабит для отрицательного веса. Давайте начнём с того, что представим положительные двадцать пять в двоичном виде, затем найдём дополнение до двух и объединим всё это в одну нумерацию:
+2510 = 0110012 (показаны все 6 бит) |
Инвертируем (дополняем до единицы): 0110012 → 1001102.
Дополняем до двух: 1001102 + 0000012 = 1001112.
Итак, -2510 = 1001112.
Фактически, мы представляем отрицательные двадцать пять, используя шестой бит (экстрабит) обозначающий отрицательные тридцать два плюс положительные семь (710 = 1112). Второе число в двоичный вид привести проще: 1810 = 0100102.
Ну что ж, складываем «столбиком» оба числа в двоичной форме, смотрим, что получается:
Поскольку слева не было «лишних» битов (ответ тоже 6-битный), то нет и битов, которые нужно отбрасывать. Крайний левый экстрабит равен 1, что означает, что ответ отрицательный (в форме дополнения до двух), как и должно быть. Преобразуя ответ в десятеричную форму, суммируя все биты, умноженные на их соответствующие значения веса, получаем:
(1 × -3210) + (1 × 1610) + (1 × 810) + (0 × 410) + (0 × 210) + (1 × 110) = -3210 + 2510 = -710.
И правда, -710 – это и есть сумма -2510 + 1810.
См.также
Внешние ссылки