Создание программы C++ для двоичного вычитания
23 февраля 2022 г.Введение
Двоичные числа — это числа, цифры которых состоят из 0 и 1. Двоичное вычитание — это одна из четырех арифметических операций, в которых мы выполняем метод вычитания двух двоичных чисел. Операция очень похожа на арифметическое вычитание.
Когда мы выполняем двоичное вычитание и вычитаем 1 из 0, мы должны заимствовать 1 из следующей цифры более высокого порядка, чтобы уменьшить ее на 1, и в этом случае остаток остается 1.
Двоичные операции вычитания
Ниже приведены некоторые основные операции, выполняемые при вычитании двух двоичных чисел.
- 0 – 0 = 0
- 1 – 0 = 1
- 1 – 1 = 0
- 0 – 1 = 1 (Заимствовать 1 из следующей старшей цифры)
Методы вычитания двоичных чисел
Существует несколько способов вычитания [двоичных чисел] (https://hackernoon.com/an-essential-guide-to-binary-representation-of-floating-point-numbers-uw2n37tc). Некоторые из них следующие:
А. Обычное вычитание путем заимствования из старшей цифры
Возьмите два числа, например 1010 и 101.
1 0 1 0
- 1 0 1
- Начиная с последней цифры, вычитаем (0 - 1). Нам нужно позаимствовать 1 из другого столбца, поэтому после заимствования 1 оно становится (10 - 1), что приводит к 1.
1 0 1 0
- 1 0 1
1
- На месте десятков у нас остается (0 - 0), что дает 0.
1 0 1 0
- 1 0 1
- В разряде 100 заимствуем 1 из разряда 1000. После выполнения операции (10-1) мы получаем 1 на 1000 разряде.
1 0 1 0
- 1 0 1
1 0 1
- На месте 1000 у нас остался только 0, поэтому на выходе этой подстанции получается 0101. Мы можем перепроверить это, так как 1010 в десятичном виде равно 10, а 101 равно 5. Итак, 10 - 5 = 5 ( 0101 в двоичный)
1 0 1 0
- 1 0 1
0 1 0 1
B. Двоичное вычитание с использованием дополнения до 1
Мы можем вычесть два числа, используя дополнение до 1. Следующие шаги должны быть выполнены -
- Запишите дополнение вычитаемого до единицы.
- Добавьте это дополнение к уменьшаемому.
- Если результат содержит перенос, добавьте его к младшему значащему биту.
- Если переноса нет, возьмите дополнение до 1 результата и его отрицательное значение.
Возьмем два числа 110101(53) и 100101(37).
1 1 0 1 0 1
- 1 0 0 1 0 1
Здесь 37 — вычитаемое. Дополнение 37 до единицы - 011010
Добавляя его с minuend.
1 1 0 1 0 1
+ 0 1 1 0 1 0
10 0 1 1 1 1
Здесь 1 — перенос. Теперь мы добавляем это 1 к результату.
1 0 0 1 1 1 1
- 1
0 1 0 0 0 0
В результате получается 010000, что равно 16 в десятичном формате.
С. Двоичное вычитание с использованием дополнения до двух
Чтобы выполнить [бинарное вычитание] (https://www.scaler.com/topics/binary-subtraction/) с использованием дополнения до двух, необходимо выполнить следующие шаги:
- Найдите дополнение до двух вычитаемого.
- Добавьте дополнение к этим двум с уменьшаемым окончанием.
- Отбросьте бит переноса, если он есть, а остальное - ответ.
- В случае отсутствия переноса возьмите дополнение до двух от результата, который будет отрицательным.
Возьмем два числа 10101(21) и 00111(7). Вычисление дополнения до двух вычитаемого.
0 0 1 1 1 = 1 1 0 0 1 (в дополнении до 2)
Добавляя его к minuend,
1 0 1 0 1
+ 1 1 0 0 1
1 0 1 1 1 0
Мы получаем 1, поэтому отбрасываем его, и окончательный ответ приходит к 01110(14).
Программа C++ для выполнения двоичного вычитания
```javascript
include
include<бит/stdc++.h>
использование пространства имен std;
// Программа для вычитания двух двоичных чисел
Вычитание недействительный (Int N, Int А [], Int Ь [])
// Дополнение вычитаемого до 1
for(int i = 0; i < n; i++)
//Заменяем 1 на 0
если (Ь [я] == 1)
б [я] = 0;
// Заменить 0 на 1
еще
б [я] = 1;
//Добавить 1 в конце, чтобы получить дополнение до 2 вычитаемого
for(int i = n - 1; i >= 0; i--)
если (б [я] == 0)
б [я] = 1;
перерыв;
еще
б [я] = 0;
// Представляет перенос
инт = 0;
for(int i = n - 1; i >= 0; i--)
// Добавляем a, b и переносим
а[я] = а[я] + б[я] + т;
// Если a[i] равно 2
если (а [я] == 2)
а[я] = 0;
т = 1;
// Если a[i] равно 3
иначе если (a[i] == 3)
а[я] = 1;
т = 1;
еще
т = 0;
cout << конец;
// Если перенос сгенерирован
// отбросить перенос
если (т == 1)
// распечатать результат
for(int i = 0; i < n; i++)
// Печать результата
cout<<a[i];
// если перенос не сгенерирован
еще
// Вычисление дополнения до 2
// полученного результата
for(int i = 0; i < n; i++)
если (а [я] == 1)
а[я] = 0;
еще
а[я] = 1;
for(int i = n - 1; i >= 0; i--)
если (а [я] == 0)
а[я] = 1;
перерыв;
еще
а[я] = 0;
// Добавляем знак -ve для представления
cout << "-";
// -ve результат
// Печатаем результирующий массив
for(int i = 0; i < n; i++)
cout << а[i];
int main() // Основная функция
инт н;
п = 5;
int а [] = {1, 0, 1, 0, 1},
б[] = {0, 0, 1, 1, 1};
Вычесть (п, а, б);
вернуть 0;
Выход:
```javascript
Временная сложность - O(nlogn)
Пространственная сложность - O(1)
Заключение
Мы можем вычесть два двоичных числа, используя три метода — простое вычитание, с использованием дополнения до 1 и с использованием дополнения до 2.
При простом вычитании мы заимствуем бит из следующего старшего значащего бита.
В дополнении до 1 мы выполняем дополнение до 1 вычитаемого и прибавляем его к уменьшаемому. Если есть перенос, добавьте его к последнему биту, в противном случае возьмите дополнение результата до 1.
В случае вычитания дополнения до двойки возьмите дополнение до двойки вычитаемого и прибавьте его к уменьшаемому. Если есть перенос, отбросьте его, иначе возьмите два дополнения к результату, что приведет к отрицательному ответу**.**
Оригинал