Related Articles

# 2’s complement for a givin string using XOR

• Last Updated : 07 Jul, 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++

 `// C++ program to find 2's complement using XOR.``#include ``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

 `= 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

 ``
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.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with experts, please refer DSA Live Classes for Working Professionals and Competitive Programming Live for Students.

My Personal Notes arrow_drop_up