Skip to content
Related Articles

Related Articles

2’s compliment for a givin string using XOR
  • Last Updated : 18 Feb, 2021

Given a binary string, task is to convert this string in to two’s compliment with the help of XOR operator.

Examples: 

Input : 00000101
Output :11111011

Input : 10010
Output : 01110

We have discussed an approach in previous post to find 2’s complement

For 2’s complement, we first find one’s complement. We traverse the one’s complement starting from LSB (least significant bit), and look for 0. We flip all 1’s (change to 0) until we find a 0. Finally, we flip the found 0.

We traverse from the last bot and keep ignoring all 0s until we find a 1. We ignore first 1 also. Then we toggle all bits by doing XOR with 1.

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# 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.

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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.

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

<?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
?>

chevron_right


Output: 

011

 

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.




My Personal Notes arrow_drop_up
Recommended Articles
Page :