Электроника:Цифровая электроника/Двоичная арифметика/Двоичное вычитание: различия между версиями
Valemak (обсуждение | вклад) (Новая страница: «{{Панель управления/Электроника}} {{Перевод от valemak}} {{Myagkij-редактор}} =Двоичное вычитание<re...») |
Нет описания правки |
||
(не показано 5 промежуточных версий 2 участников) | |||
Строка 10: | Строка 10: | ||
Вот пример задачи, которую нужно выполнить: | Вот пример задачи, которую нужно выполнить: | ||
Вычитание: 7<sub>10</sub> - 5<sub>10</sub> | {| class="wikitable" | ||
|- | |||
Эквивалентное сложение: 7<sub>10</sub> + (-5<sub>10</sub>) | | Вычитание: 7<sub>10</sub> - 5<sub>10</sub><br />Эквивалентное сложение: 7<sub>10</sub> + (-5<sub>10</sub>) | ||
|} | |||
Если всё, что нам нужно сделать, это представить в двоичной форме семёрку и отрицательную пятёрку (с дополнением до двух), то нам хватит всего трёх битов для, собственно, самих величин + экстрабит для отрицательного веса: | Если всё, что нам нужно сделать, это представить в двоичной форме семёрку и отрицательную пятёрку (с дополнением до двух), то нам хватит всего трёх битов для, собственно, самих величин + экстрабит для отрицательного веса: | ||
Положительное «семь» = 0111<sub>2</sub> | {| class="wikitable" | ||
|- | |||
Отрицательное «пять» = 1011<sub>2</sub> | | Положительное «семь» = 0111<sub>2</sub><br />Отрицательное «пять» = 1011<sub>2</sub> | ||
|} | |||
Теперь давайте оба числа сложим «столбиком»: | Теперь давайте оба числа сложим «столбиком»: | ||
[[File:IV-2_4_1.png|250px|center|thumb|'''Рис. 1.''' Складываем столбиком двоичные 100111 и 010010.|alt=Рис. 1. Складываем столбиком двоичные 100111 и 010010.]] | |||
Отбросим «лишний» пятый бит, получаем ответ: 0010<sub>2</sub> | |||
1 | |||
Отбросим «лишний» пятый бит, получаем ответ: | |||
Поскольку мы уже определили наше числовое битовое поле как «три бита + экстрабит отрицательного веса» (т.е. всего 4 бита), тогда пятый бит нужно отбросить, что даст результат 0010<sub>2</sub> (или положительные 2<sub>10</sub>), что и является правильным ответом. | Поскольку мы уже определили наше числовое битовое поле как «три бита + экстрабит отрицательного веса» (т.е. всего 4 бита), тогда пятый бит нужно отбросить, что даст результат 0010<sub>2</sub> (или положительные 2<sub>10</sub>), что и является правильным ответом. | ||
Строка 33: | Строка 32: | ||
Если непонятно, почему мы отбрасываем этот лишний пятый бит, можно вспомнить, что крайний левый бит младшего числа имеет отрицательный вес, в данном случае он равен отрицательной восьмёрке. | Если непонятно, почему мы отбрасываем этот лишний пятый бит, можно вспомнить, что крайний левый бит младшего числа имеет отрицательный вес, в данном случае он равен отрицательной восьмёрке. | ||
Когда мы складываем эти два двоичных числа вместе, то, что мы это фактически делаем с MSB – вычитаем MSB нижнего числа из MSB верхнего числа. При вычитании никто никогда не «переносит» цифру или бит на следующий левый весовой коэффициент. | Когда мы складываем эти два двоичных числа вместе, то, что мы это фактически делаем с [[MSB]] – вычитаем [[MSB]] нижнего числа из [[MSB]] верхнего числа. При вычитании никто никогда не «переносит» цифру или бит на следующий левый весовой коэффициент. | ||
Давайте выполним другой пример, на этот раз с бо́льшими (в абсолютном значении) числами. Сложим -25<sub>10</sub> и 18<sub>10</sub>. Для начала определимся, насколько большим должно быть наше двоичное битовое поле. | Давайте выполним другой пример, на этот раз с бо́льшими (в абсолютном значении) числами. Сложим -25<sub>10</sub> и 18<sub>10</sub>. Для начала определимся, насколько большим должно быть наше двоичное битовое поле. | ||
Строка 39: | Строка 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>. | ||
Строка 52: | Строка 54: | ||
Ну что ж, складываем «столбиком» оба числа в двоичной форме, смотрим, что получается: | Ну что ж, складываем «столбиком» оба числа в двоичной форме, смотрим, что получается: | ||
[[File:IV-2_4_2.png|250px|center|thumb|'''Рис. 2.''' Складываем столбиком двоичные 100111 и 010010.|alt=Рис. 2. Складываем столбиком двоичные 100111 и 010010.]] | |||
Поскольку слева не было «лишних» битов (ответ тоже 6-битный), то нет и битов, которые нужно отбрасывать. Крайний левый экстрабит равен 1, что означает, что ответ отрицательный (в форме дополнения до двух), как и должно быть. Преобразуя ответ в десятеричную форму, суммируя все биты, умноженные на их соответствующие значения веса, получаем: | Поскольку слева не было «лишних» битов (ответ тоже 6-битный), то нет и битов, которые нужно отбрасывать. Крайний левый экстрабит равен 1, что означает, что ответ отрицательный (в форме дополнения до двух), как и должно быть. Преобразуя ответ в десятеричную форму, суммируя все биты, умноженные на их соответствующие значения веса, получаем: | ||
Строка 66: | Строка 64: | ||
=См.также= | =См.также= | ||
=Внешние ссылки= | =Внешние ссылки= | ||
Строка 72: | Строка 70: | ||
<references /> | <references /> | ||
{{Навигационная таблица/Электроника}} | {{Навигационная таблица/Портал/Электроника}} | ||
[[Категория:Цифровая электроника]] | |||
[[Категория:Двоичная арифметика]] | |||
[[Категория:Двоичное вычитание]] |
Текущая версия от 21:51, 22 мая 2023
Двоичное вычитание[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.
См.также
Внешние ссылки