2's complement for a given string using XOR - GeeksforGeeks

31 Dec, 2021
Given a binary string, task is to convert this string in to two’s complement 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++
Java
Python3
C#
PHP
Javascript
// 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 codeint main(){    string str = "101";    cout << TwoscomplementbyXOR(str);    return 0;}
// 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 codepublic static void main(String[] args) {     String str = "101";          TwoscomplementbyXOR(str);}}  // This code is contributed by amreshkumar3
# 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 codestr = "101"print(TwoscomplementbyXOR(str))  # This code is contributed by subhammahato348.
// 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 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?>
<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
 
jit_t
amreshkumar3
subhammahato348
divyeshrabadiya07
_saurabh_jaiswal
ruhelaa48
surindertarika1234
binary-string
Bitwise-XOR
complement
Bit Magic
Bit Magic
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Set, Clear and Toggle a given bit of a number in C
Check whether K-th bit is set or not
Program to find parity
Write an Efficient Method to Check if a Number is Multiple of 3
Hamming code Implementation in C/C++
Check for Integer Overflow
Swap bits in a given number
Highest power of 2 less than or equal to given number
Builtin functions of GCC compiler
Count number of bits to be flipped to convert A to B