Complemento a 2 para una string dada usando XOR

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>
Producción: 

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *