Создание программы C++ для двоичного вычитания

Создание программы 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


  1. Начиная с последней цифры, вычитаем (0 - 1). Нам нужно позаимствовать 1 из другого столбца, поэтому после заимствования 1 оно становится (10 - 1), что приводит к 1.

1 0 1 0


-   1 0 1


1


  1. На месте десятков у нас остается (0 - 0), что дает 0.

1 0 1 0


-   1 0 1


  1. В разряде 100 заимствуем 1 из разряда 1000. После выполнения операции (10-1) мы получаем 1 на 1000 разряде.

1 0 1 0


-   1 0 1


1  0  1


  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.



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





Оригинал
PREVIOUS ARTICLE
NEXT ARTICLE