Dada una string binaria, la tarea es convertir esta string en complemento a dos con la ayuda del operador XOR.
Ejemplos:
Input : 00000101 Output :11111011 Input : 10010 Output : 01110
Hemos discutido un enfoque en una publicación anterior para encontrar el complemento de 2
Para el complemento a 2, primero encontramos el complemento a uno. Recorremos el complemento a uno comenzando desde LSB (bit menos significativo) y buscamos el 0. Volteamos todos los 1 (cambiamos a 0) hasta encontrar un 0. Finalmente, volteamos el 0 encontrado.
Atravesamos desde el último bot y seguimos ignorando todos los 0 hasta que encontramos un 1. También ignoramos el primer 1. Luego alternamos todos los bits haciendo XOR con 1.
C++
// C++ program to find 2's complement using XOR. #include <bits/stdc++.h> using namespace std; string TwoscomplementbyXOR(string str) { int n = str.length(); // A flag used to find if a 1 bit is seen // or not. bool check_bit = 0; for (int i = n - 1; i >= 0; i--) { if (str[i] == '0' && check_bit == 0) { continue; } else { // xor operator is used to flip the if (check_bit == 1) str[i] = (str[i] - '0') ^ 1 + '0'; // bits after converting in to // ASCII values check_bit = 1; } } // if there is no 1 in the string so just add // 1 in starting of string and return if (check_bit == 0) return "1" + str; else return str; } // Driver code int main() { string str = "101"; cout << TwoscomplementbyXOR(str); return 0; }
Java
// Java program to find 2's complement using XOR. import java.util.*; class GFG{ static void TwoscomplementbyXOR(String str) { int n = str.length(); // A flag used to find if a 1 bit is seen // or not. boolean check_bit = false; for(int i = n - 1; i >= 0; i--) { if (str.charAt(i) == '0' && check_bit == false) { continue; } else { // xor operator is used to flip the if (check_bit == true) { if (str.charAt(i) == '0') str = str.substring(0, i) + '1' + str.substring(i + 1); else str = str.substring(0, i) + '0' + str.substring(i + 1); } // bits after converting in to // ASCII values check_bit = true; } } // If there is no 1 in the string so just add // 1 in starting of string and return if (check_bit == false) { System.out.println("1" + str); } else System.out.println(str); } // Driver code public static void main(String[] args) { String str = "101"; TwoscomplementbyXOR(str); } } // This code is contributed by amreshkumar3
Python3
# Python program to find 2's complement using XOR. def TwoscomplementbyXOR(str): n = len(str) # A flag used to find if a 1 bit is seen # or not. check_bit = 0 i = n - 1 s = list(str) while (i >= 0): if (s[i] == '0' and check_bit == 0): continue else: # xor operator is used to flip the if (check_bit == 1): s[i] = chr((ord(s[i]) - 48) ^ 1 + 48) # bits after converting in to # ASCII values check_bit = 1 i -= 1 # if there is no 1 in the string so just add # 1 in starting of string and return str = "".join(s) if (check_bit == 0): return "1" + str else: return str # Driver code str = "101" print(TwoscomplementbyXOR(str)) # This code is contributed by subhammahato348.
C#
// C# program to find 2's complement using XOR. using System; class GFG { static void TwoscomplementbyXOR(string str) { int n = str.Length; // A flag used to find if a 1 bit is seen // or not. bool check_bit = false; for(int i = n - 1; i >= 0; i--) { if (str[i] == '0' && check_bit == false) { continue; } else { // xor operator is used to flip the if (check_bit == true) { if (str[i] == '0') str = str.Substring(0, i) + '1' + str.Substring(i + 1); else str = str.Substring(0, i) + '0' + str.Substring(i + 1); } // bits after converting in to // ASCII values check_bit = true; } } // If there is no 1 in the string so just add // 1 in starting of string and return if (check_bit == false) { Console.WriteLine("1" + str); } else Console.WriteLine(str); } // Driver code static void Main() { string str = "101"; TwoscomplementbyXOR(str); } } // This code is contributed by divyeshrabadiya07.
PHP
<?php // PHP program to find 2's complement // using XOR. function TwoscomplementbyXOR($str) { $n =strlen($str); // A flag used to find if a 1 // bit is seen or not. $check_bit = 0; for ($i = $n - 1; $i >= 0; $i--) { if ($str[$i] == '0' && $check_bit == 0) { continue; } else { // xor operator is used // to flip the if ($check_bit == 1) $str[$i] = ($str[$i] - '0') ^ 1 + '0'; // bits after converting in to // ASCII values $check_bit = 1; } } // if there is no 1 in the string // so just add 1 in starting of // string and return if ($check_bit == 0) return "1" + $str; else return $str; } // Driver code $str = "101"; echo TwoscomplementbyXOR($str); // This code is contributed by akt_mit ?>
Javascript
<script> // Javascript program to find 2's complement // using XOR. function TwoscomplementbyXOR(str) { let n = str.length; // A flag used to find if a 1 // bit is seen or not. let check_bit = 0; for (let i = n - 1; i >= 0; i--) { if (str[i] == '0' && check_bit == 0) { continue; } else { // xor operator is used // to flip the if (check_bit == 1) { if (str.charAt(i) == '0') str = str.substr(0, i) + '1' + str.substr(i + 1); else str = str.substr(0, i) + '0' + str.substr(i + 1); } // bits after converting in to // ASCII values check_bit = 1; } } // if there is no 1 in the string // so just add 1 in starting of // string and return if (check_bit == 0) return "1" + str; else return str; } // Driver code let str = "101"; document.write(TwoscomplementbyXOR(str)); // This code is contributed by _saurabh_jaiswal </script>
011
Publicación traducida automáticamente
Artículo escrito por mubashshir ahmad y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA