Dados dos números a y b . La tarea es restar b de a usando el método Complemento a 2 .
Nota : Números negativos representados como complemento a 2 de números positivos.
Por ejemplo, -5 se puede representar en forma binaria como Complemento a 2 de 5. Mira la imagen a continuación:
Ejemplos :
Input : a = 2, b = 3 Output : -1 Input : a = 9, b = 7 Output : 2
Para restar b de a . Escriba la expresión (ab) como:
(a - b) = a + (-b)
Ahora (-b) se puede escribir como (complemento a 2 de b). Entonces, la expresión anterior ahora se puede escribir como:
(a - b) = a + (2's complement of b)
Entonces, el problema ahora se reduce a «Sumar a al complemento a 2 de b «. La siguiente imagen ilustra el método de resta anterior para el primer ejemplo donde a = 2 y b = 3.
A continuación se muestra la implementación del método anterior:
C++
#include <bits/stdc++.h> using namespace std; // function to subtract two values // using 2's complement method int Subtract(int a, int b) { int c; // ~b is the 1's Complement of b // adding 1 to it make it 2's Complement c = a + (~b + 1); return c; } // Driver code int main() { int a = 2, b = 3; cout << Subtract(a, b)<<endl; a = 9; b = 7; cout << Subtract(a, b); return 0; }
Java
class GFG { // function to subtract two values // using 2's complement method static int Subtract(int a, int b) { int c; // ~b is the 1's Complement // of b adding 1 to it make // it 2's Complement c = a + (~b + 1); return c; } // Driver code public static void main(String[] args) { int a = 2, b = 3; System.out.println(Subtract(a, b)); a = 9; b = 7; System.out.println(Subtract(a, b)); } } // This code is contributed // by ChitraNayal
Python3
# python3 program of subtraction of # two numbers using 2's complement . # function to subtract two values # using 2's complement method def Subtract(a,b): # ~b is the 1's Complement of b # adding 1 to it make it 2's Complement c = a + (~b + 1) return c # Driver code if __name__ == "__main__" : # multiple assignments a,b = 2,3 print(Subtract(a,b)) a,b = 9,7 print(Subtract(a,b))
C#
// C# program of subtraction of // two numbers using 2's complement using System; class GFG { // function to subtract two values // using 2's complement method static int Subtract(int a, int b) { int c; // ~b is the 1's Complement // of b adding 1 to it make // it 2's Complement c = a + (~b + 1); return c; } // Driver code static void Main() { int a = 2, b = 3; Console.WriteLine(Subtract(a, b)); a = 9; b = 7; Console.WriteLine(Subtract(a, b)); } } // This code is contributed // by mits
PHP
<?php // function to subtract two values // using 2's complement method function Subtract($a, $b) { // ~b is the 1's Complement // of b adding 1 to it make // it 2's Complement $c = $a + (~$b + 1); return $c; } // Driver code $a = 2; $b = 3; echo Subtract($a, $b) . "\n"; $a = 9; $b = 7; echo Subtract($a, $b) . "\n"; // This code is contributed // by ChitraNayal ?>
Javascript
<script> // Function to subtract two values // using 2's complement method function Subtract(a, b) { var c; // ~b is the 1's Complement of b // adding 1 to it make it 2's Complement c = a + (~b + 1); return c; } // Driver code var a = 2, b = 3; document.write( Subtract(a, b) + "<br>"); a = 9; b = 7; document.write( Subtract(a, b)); // This code is contributed by itsok </script>
-1 2
Complejidad del tiempo – O(nlog2(n))
Espacio auxiliar – O(1)
Método 2: enfoque básico o enfoque de fuerza bruta
Resta de dos números binarios, resta dos números binarios usando el método de complemento a 2.
Paso 1: Encuentra el complemento a 2 del sustraendo.
Paso 2: Sume el primer número y el complemento a 2 del sustraendo.
Paso 3: si se produce el acarreo, deséchelo. Si no hay acarreo, tome el complemento a 2 del resultado.
A continuación se muestra la implementación del enfoque anterior.
C++
//C++ code for above approach #include<iostream> #include<bits/stdc++.h> using namespace std; // Program to subtract void Subtract(int n, int a[], int b[]) { // 1's Complement for(int i = 0; i < n; i++) { //Replace 1 by 0 if(b[i] == 1) { b[i] = 0; } //Replace 0 by 1 else { b[i] = 1; } } //Add 1 at end to get 2's Complement for(int i = n - 1; i >= 0; i--) { if(b[i] == 0) { b[i] = 1; break; } else { b[i] = 0; } } // Represents carry int t = 0; for(int i = n - 1; i >= 0; i--) { // Add a, b and carry a[i] = a[i] + b[i] + t; // If a[i] is 2 if(a[i] == 2) { a[i] = 0; t = 1; } // If a[i] is 3 else if(a[i] == 3) { a[i] = 1; t = 1; } else t = 0; } cout << endl; // If carry is generated // discard the carry if(t==1) { // print the result for(int i = 0; i < n; i++) { // Print the result cout<<a[i]; } } // if carry is not generated else { // Calculate 2's Complement // of the obtained result for(int i = 0; i < n; i++) { if(a[i] == 1) a[i] = 0; else a[i] = 1; } for(int i = n - 1; i >= 0; i--) { if(a[i] == 0) { a[i] = 1; break; } else a[i] = 0; } // Add -ve sign to represent cout << "-"; // -ve result // Print the resultant array for(int i = 0; i < n; i++) { cout << a[i]; } } } // Driver Code int main() { int n; n = 5; int a[] = {1, 0, 1, 0, 1}, b[] = {1, 1, 0, 1, 0}; Subtract(n,a,b); return 0; }
Java
// Java code for above approach import java.io.*; class GFG{ // Program to subtract static void Subtract(int n, int a[], int b[]) { // 1's Complement for(int i = 0; i < n; i++) { // Replace 1 by 0 if (b[i] == 1) { b[i] = 0; } // Replace 0 by 1 else { b[i] = 1; } } // Add 1 at end to get 2's Complement for(int i = n - 1; i >= 0; i--) { if (b[i] == 0) { b[i] = 1; break; } else { b[i] = 0; } } // Represents carry int t = 0; for(int i = n - 1; i >= 0; i--) { // Add a, b and carry a[i] = a[i] + b[i] + t; // If a[i] is 2 if (a[i] == 2) { a[i] = 0; t = 1; } // If a[i] is 3 else if (a[i] == 3) { a[i] = 1; t = 1; } else t = 0; } System.out.println(); // If carry is generated // discard the carry if (t == 1) { // Print the result for(int i = 0; i < n; i++) { // Print the result System.out.print(a[i]); } } // If carry is not generated else { // Calculate 2's Complement // of the obtained result for(int i = 0; i < n; i++) { if (a[i] == 1) a[i] = 0; else a[i] = 1; } for(int i = n - 1; i >= 0; i--) { if (a[i] == 0) { a[i] = 1; break; } else a[i] = 0; } // Add -ve sign to represent System.out.print("-"); // -ve result // Print the resultant array for(int i = 0; i < n; i++) { System.out.print(a[i]); } } } // Driver Code public static void main (String[] args) { int n; n = 5; int a[] = {1, 0, 1, 0, 1}; int b[] = {1, 1, 0, 1, 0}; Subtract(n, a, b); } } // This code is contributed by avanitrachhadiya2155
Python3
# Python implementation of above approach # Program to subtract def Subtract(n, a, b): # 1's Complement for i in range(n): # Replace 1 by 0 if (b[i] == 1): b[i] = 0 # Replace 0 by 1 else: b[i] = 1 # Add 1 at end to get 2's Complement for i in range(n - 1, -1, -1): if (b[i] == 0): b[i] = 1 break else: b[i] = 0 # Represents carry t = 0 for i in range(n - 1, -1, -1): # Add a, b and carry a[i] = a[i] + b[i] + t # If a[i] is 2 if (a[i] == 2): a[i] = 0 t = 1 # If a[i] is 3 elif (a[i] == 3): a[i] = 1 t = 1 else: t = 0 print() # If carry is generated # discard the carry if (t == 1): # Print the result for i in range(n): # Print the result print(a[i],end="") # If carry is not generated else: # Calculate 2's Complement # of the obtained result for i in range(n): if (a[i] == 1): a[i] = 0 else: a[i] = 1 for i in range(n - 1, -1, -1): if (a[i] == 0): a[i] = 1 break else: a[i] = 0 # Add -ve sign to represent print("-",end="") # -ve result # Print the resultant array for i in range(n): print(a[i],end="") # Driver Code n = 5 a=[1, 0, 1, 0, 1] b=[1, 1, 0, 1, 0] Subtract(n, a, b) # This code is contributed by shinjanpatra
C#
// C# code for above approach using System; class GFG{ // Program to subtract static void Subtract(int n, int[] a, int[] b) { // 1's Complement for(int i = 0; i < n; i++) { // Replace 1 by 0 if (b[i] == 1) { b[i] = 0; } // Replace 0 by 1 else { b[i] = 1; } } // Add 1 at end to get 2's Complement for(int i = n - 1; i >= 0; i--) { if (b[i] == 0) { b[i] = 1; break; } else { b[i] = 0; } } // Represents carry int t = 0; for(int i = n - 1; i >= 0; i--) { // Add a, b and carry a[i] = a[i] + b[i] + t; // If a[i] is 2 if (a[i] == 2) { a[i] = 0; t = 1; } // If a[i] is 3 else if (a[i] == 3) { a[i] = 1; t = 1; } else t = 0; } Console.WriteLine(); // If carry is generated // discard the carry if (t == 1) { // Print the result for(int i = 0; i < n; i++) { // Print the result Console.Write(a[i]); } } // If carry is not generated else { // Calculate 2's Complement // of the obtained result for(int i = 0; i < n; i++) { if (a[i] == 1) a[i] = 0; else a[i] = 1; } for(int i = n - 1; i >= 0; i--) { if (a[i] == 0) { a[i] = 1; break; } else a[i] = 0; } // Add -ve sign to represent Console.Write("-"); // -ve result // Print the resultant array for(int i = 0; i < n; i++) { Console.Write(a[i]); } } } // Driver Code static public void Main() { int n; n = 5; int[] a = {1, 0, 1, 0, 1}; int[] b = {1, 1, 0, 1, 0}; Subtract(n, a, b); } } // This code is contributed by rag2127
Javascript
<script> // Javascript code for above approach // Program to subtract function Subtract(n,a,b) { // 1's Complement for(let i = 0; i < n; i++) { // Replace 1 by 0 if (b[i] == 1) { b[i] = 0; } // Replace 0 by 1 else { b[i] = 1; } } // Add 1 at end to get 2's Complement for(let i = n - 1; i >= 0; i--) { if (b[i] == 0) { b[i] = 1; break; } else { b[i] = 0; } } // Represents carry let t = 0; for(let i = n - 1; i >= 0; i--) { // Add a, b and carry a[i] = a[i] + b[i] + t; // If a[i] is 2 if (a[i] == 2) { a[i] = 0; t = 1; } // If a[i] is 3 else if (a[i] == 3) { a[i] = 1; t = 1; } else t = 0; } document.write("<br>"); // If carry is generated // discard the carry if (t == 1) { // Print the result for(let i = 0; i < n; i++) { // Print the result document.write(a[i]); } } // If carry is not generated else { // Calculate 2's Complement // of the obtained result for(let i = 0; i < n; i++) { if (a[i] == 1) a[i] = 0; else a[i] = 1; } for(let i = n - 1; i >= 0; i--) { if (a[i] == 0) { a[i] = 1; break; } else a[i] = 0; } // Add -ve sign to represent document.write("-"); // -ve result // Print the resultant array for(let i = 0; i < n; i++) { document.write(a[i]); } } } // Driver Code let n = 5; let a=[1, 0, 1, 0, 1]; let b=[1, 1, 0, 1, 0]; Subtract(n, a, b); // This code is contributed by patel2127 </script>
-00101
Complejidad del tiempo : O(N)
Espacio Auxiliar : O(1)
Publicación traducida automáticamente
Artículo escrito por Naman_Garg y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA