# 2’s complement for a given string using XOR

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

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

My Personal Notes arrow_drop_up