Given a integer ‘x’, find the number of values of ‘a’ satisfying the following conditions:

- 0 <= a <= x
- a XOR x = a + x

**Examples :**

Input : 5 Output : 2 Explanation: For x = 5, following 2 values of 'a' satisfy the conditions: 5 XOR 0 = 5+0 5 XOR 2 = 5+2 Input : 10 Output : 4 Explanation: For x = 10, following 4 values of 'a' satisfy the conditions: 10 XOR 0 = 10+0 10 XOR 1 = 10+1 10 XOR 4 = 10+4 10 XOR 5 = 10+5

**Naive Approach:**

A Simple approach is to check for all values of ‘a’ between 0 and ‘x’ (both inclusive) and calculate its XOR with x and check if the condition 2 satisfies.

## C++

`// C++ program to find count of values whose XOR ` `// with x is equal to the sum of value and x ` `// and values are smaller than equal to x ` `#include<bits/stdc++.h> ` `using` `namespace` `std; ` ` ` `int` `FindValues(` `int` `x) ` `{ ` ` ` `// Initialize result ` ` ` `int` `count = 0; ` ` ` ` ` `// Traversing through all values between ` ` ` `// 0 and x both inclusive and counting ` ` ` `// numbers that satisfy given property ` ` ` `for` `(` `int` `i=0; i<=x; i++) ` ` ` `if` `((x+i) == (x^i)) ` ` ` `count++; ` ` ` ` ` `return` `count; ` `} ` ` ` `// Driver code ` `int` `main() ` `{ ` ` ` `int` `x = 10; ` ` ` `cout << FindValues(x); ` ` ` `return` `0; ` `} ` |

*chevron_right*

*filter_none*

## Java

`// Java program to find count of values whose XOR ` `// with x is equal to the sum of value and x ` `// and values are smaller than equal to x ` ` ` `class` `Fib ` `{ ` ` ` `static` `int` `FindValues(` `int` `x) ` ` ` `{ ` ` ` `// Initialize result ` ` ` `int` `count = ` `0` `; ` ` ` ` ` `// Traversing through all values between ` ` ` `// 0 and x both inclusive and counting ` ` ` `// numbers that satisfy given property ` ` ` `for` `(` `int` `i=` `0` `; i<=x; i++) ` ` ` `if` `((x+i) == (x^i)) ` ` ` `count++; ` ` ` ` ` `return` `count; ` ` ` `} ` ` ` ` ` `public` `static` `void` `main (String[] args) ` ` ` `{ ` ` ` `int` `x=` `10` `; ` ` ` `System.out.println(FindValues(x)); ` ` ` `} ` `} ` |

*chevron_right*

*filter_none*

## Python3

`# Python3 program to find count of ` `# values whose XOR with x is equal ` `# to the sum of value and x and ` `# values are smaller than equal to x ` ` ` `def` `FindValues( x): ` ` ` ` ` `# Initialize result ` ` ` `count ` `=` `0` `; ` ` ` ` ` `# Traversing through all values ` ` ` `# between 0 and x both inclusive ` ` ` `# and counting numbers that ` ` ` `# satisfy given property ` ` ` `for` `i ` `in` `range` `(` `0` `, x): ` ` ` `if` `((x ` `+` `i) ` `=` `=` `(x ^ i)): ` ` ` `count ` `=` `count ` `+` `1` `; ` ` ` ` ` `return` `count; ` ` ` `# Driver code ` `x ` `=` `10` `; ` `print` `(FindValues(x)); ` ` ` `# This code is contributed ` `# by Shivi_Aggarwal ` |

*chevron_right*

*filter_none*

## C#

`// C# program to find count of values whose XOR ` `// with x is equal to the sum of value and x ` `// and values are smaller than equal to x ` `using` `System; ` ` ` `class` `Fib ` `{ ` ` ` `static` `int` `FindValues(` `int` `x) ` ` ` `{ ` ` ` `// Initialize result ` ` ` `int` `count = 0; ` ` ` ` ` `// Traversing through all values between ` ` ` `// 0 and x both inclusive and counting ` ` ` `// numbers that satisfy given property ` ` ` `for` `(` `int` `i = 0; i <= x; i++) ` ` ` `if` `((x+i) == (x^i)) ` ` ` `count++; ` ` ` ` ` `return` `count; ` ` ` `} ` ` ` ` ` `// Driver code ` ` ` `public` `static` `void` `Main () ` ` ` `{ ` ` ` `int` `x = 10; ` ` ` `Console.Write(FindValues(x)); ` ` ` `} ` `} ` ` ` `// This code is contributed by Nitin Mittal. ` |

*chevron_right*

*filter_none*

## PHP

`<?php ` `// PHP program to find count ` `// of values whose XOR with x ` `// is equal to the sum of value ` `// and x and values are smaller ` `// than equal to x ` ` ` `// function return the ` `// value of count ` `function` `FindValues(` `$x` `) ` `{ ` ` ` ` ` `// Initialize result ` ` ` `$count` `= 0; ` ` ` ` ` `// Traversing through all values between ` ` ` `// 0 and x both inclusive and counting ` ` ` `// numbers that satisfy given property ` ` ` `for` `(` `$i` `= 0; ` `$i` `<= ` `$x` `; ` `$i` `++) ` ` ` `if` `((` `$x` `+ ` `$i` `) == (` `$x` `^ ` `$i` `)) ` ` ` `$count` `++; ` ` ` ` ` `return` `$count` `; ` `} ` ` ` ` ` `// Driver code ` ` ` `$x` `= 10; ` ` ` `echo` `FindValues(` `$x` `); ` ` ` `// This code is contributed by anuj_67. ` `?> ` |

*chevron_right*

*filter_none*

**Output :**

4

The time complexity of the above approach is O(x).

**Efficient Approach:**

XOR simulates binary addition without the carry over to the next digit. For the zero digits of ‘a’ we can either add a 1 or 0 without getting a carry which implies xor = + whereas if a digit in ‘a’ is 1 then the matching digit in x is forced to be 0 in order to avoid carry. For each 0 in ‘a’ in the matching digit in x can either being a 1 or 0 with a total combination count of 2^(num of zero). Hence, we just need to count the number of 0’s in binary representation of the number and answer will by 2^(number of zeroes).

## C++

`// C++ program to count numbers whose bitwise ` `// XOR and sum with x are equal ` `#include <bits/stdc++.h> ` `using` `namespace` `std; ` ` ` `// Function to find total 0 bit in a number ` `unsigned ` `int` `CountZeroBit(` `int` `x) ` `{ ` ` ` `unsigned ` `int` `count = 0; ` ` ` `while` `(x) ` ` ` `{ ` ` ` `if` `(!(x & 1)) ` ` ` `count++; ` ` ` `x >>= 1; ` ` ` `} ` ` ` `return` `count; ` `} ` ` ` `// Function to find Count of non-negative numbers ` `// less than or equal to x, whose bitwise XOR and ` `// SUM with x are equal. ` `int` `CountXORandSumEqual(` `int` `x) ` `{ ` ` ` `// count number of zero bit in x ` ` ` `int` `count = CountZeroBit(x); ` ` ` ` ` `// power of 2 to count ` ` ` `return` `(1 << count); ` `} ` ` ` `// Driver code ` `int` `main() ` `{ ` ` ` `int` `x = 10; ` ` ` `cout << CountXORandSumEqual(x); ` ` ` `return` `0; ` `} ` |

*chevron_right*

*filter_none*

## Java

`// Java program to count ` `// numbers whose bitwise ` `// XOR and sum with x ` `// are equal ` `import` `java.io.*; ` ` ` `class` `GFG ` `{ ` ` ` `// Function to find total ` `// 0 bit in a number ` `static` `int` `CountZeroBit(` `int` `x) ` `{ ` ` ` `int` `count = ` `0` `; ` ` ` `while` `(x > ` `0` `) ` ` ` `{ ` ` ` `if` `((x & ` `1` `) == ` `0` `) ` ` ` `count++; ` ` ` `x >>= ` `1` `; ` ` ` `} ` ` ` `return` `count; ` `} ` ` ` `// Function to find Count ` `// of non-negative numbers ` `// less than or equal to x, ` `// whose bitwise XOR and ` `// SUM with x are equal. ` `static` `int` `CountXORandSumEqual(` `int` `x) ` `{ ` ` ` `// count number of ` ` ` `// zero bit in x ` ` ` `int` `count = CountZeroBit(x); ` ` ` ` ` `// power of 2 to count ` ` ` `return` `(` `1` `<< count); ` `} ` ` ` `// Driver code ` `public` `static` `void` `main (String[] args) ` `{ ` ` ` ` ` `int` `x = ` `10` `; ` ` ` `System.out.println(CountXORandSumEqual(x)); ` `} ` `} ` ` ` `// The code is contributed by ajit ` |

*chevron_right*

*filter_none*

## Python3

`# Python3 program to count numbers whose bitwise ` `# XOR and sum with x are equal ` ` ` `# Function to find total 0 bit in a number ` `def` `CountZeroBit(x): ` ` ` ` ` `count ` `=` `0` `; ` ` ` `while` `(x): ` ` ` ` ` `if` `((x & ` `1` `) ` `=` `=` `0` `): ` ` ` `count ` `+` `=` `1` `; ` ` ` `x >>` `=` `1` `; ` ` ` ` ` `return` `count; ` ` ` `# Function to find Count of non-negative numbers ` `# less than or equal to x, whose bitwise XOR and ` `# SUM with x are equal. ` `def` `CountXORandSumEqual(x): ` ` ` ` ` `# count number of zero bit in x ` ` ` `count ` `=` `CountZeroBit(x); ` ` ` ` ` `# power of 2 to count ` ` ` `return` `(` `1` `<< count); ` ` ` `# Driver code ` `if` `__name__ ` `=` `=` `'__main__'` `: ` ` ` `x ` `=` `10` `; ` ` ` `print` `(CountXORandSumEqual(x)); ` ` ` `# This code is contributed by 29AjayKumar ` |

*chevron_right*

*filter_none*

## C#

`// C# program to count ` `// numbers whose bitwise ` `// XOR and sum with x ` `// are equal ` `using` `System; ` ` ` `class` `GFG ` `{ ` ` ` `// Function to find total ` `// 0 bit in a number ` `static` `int` `CountZeroBit(` `int` `x) ` `{ ` ` ` `int` `count = 0; ` ` ` `while` `(x > 0) ` ` ` `{ ` ` ` `if` `((x & 1) == 0) ` ` ` `count++; ` ` ` `x >>= 1; ` ` ` `} ` ` ` `return` `count; ` `} ` ` ` `// Function to find Count ` `// of non-negative numbers ` `// less than or equal to x, ` `// whose bitwise XOR and ` `// SUM with x are equal. ` `static` `int` `CountXORandSumEqual(` `int` `x) ` `{ ` ` ` `// count number of ` ` ` `// zero bit in x ` ` ` `int` `count = CountZeroBit(x); ` ` ` ` ` `// power of 2 to count ` ` ` `return` `(1 << count); ` `} ` ` ` `// Driver code ` `static` `public` `void` `Main () ` `{ ` ` ` `int` `x = 10; ` ` ` `Console.WriteLine(CountXORandSumEqual(x)); ` `} ` `} ` ` ` `// The code is contributed by ajit ` |

*chevron_right*

*filter_none*

## PHP

`<?php ` `// PHP program to count numbers whose bitwise ` `// XOR and sum with x are equal ` ` ` `// Function to find total 0 bit in a number ` `function` `CountZeroBit(` `$x` `) ` `{ ` ` ` `$count` `= 0; ` ` ` `while` `(` `$x` `) ` ` ` `{ ` ` ` `if` `(!(` `$x` `& 1)) ` ` ` `$count` `++; ` ` ` `$x` `>>= 1; ` ` ` `} ` ` ` `return` `$count` `; ` `} ` ` ` `// Function to find Count of ` `// non-negative numbers less ` `// than or equal to x, whose ` `// bitwise XOR and SUM with ` `// x are equal. ` `function` `CountXORandSumEqual(` `$x` `) ` `{ ` ` ` `// count number of zero bit in x ` ` ` `$count` `= CountZeroBit(` `$x` `); ` ` ` ` ` `// power of 2 to count ` ` ` `return` `(1 << ` `$count` `); ` `} ` ` ` ` ` `// Driver code ` ` ` `$x` `= 10; ` ` ` `echo` `CountXORandSumEqual(` `$x` `); ` ` ` `// This code is contributed by m_kit ` `?> ` |

*chevron_right*

*filter_none*

**Output:**

4

Time complexity of this solution is O(Log x)

This article is contributed by **DANISH KALEEM**. If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.

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.

## Recommended Posts:

- Count numbers whose difference with N is equal to XOR with N
- Count numbers whose XOR with N is equal to OR with N
- Count smaller numbers whose XOR with n produces greater value
- Find an N x N grid whose xor of every row and column is equal
- Equal Sum and XOR of three Numbers
- Count subarrays with sum equal to its XOR value
- Numbers whose bitwise OR and sum with N are equal
- Count of binary strings of length N having equal count of 0's and 1's and count of 1's ≥ count of 0's in each prefix substring
- Count smaller values whose XOR with x is greater than x
- Count all pairs of adjacent nodes whose XOR is an odd number
- Number whose sum of XOR with given array range is maximum
- Number whose XOR sum with given array is a given number k
- Find the root of the sub-tree whose weighted sum XOR with X is maximum
- Find the root of the sub-tree whose weighted sum XOR with X is minimum
- Array containing power of 2 whose XOR and Sum of elements equals X
- Count ordered pairs of positive numbers such that their sum is S and XOR is K
- XOR of two numbers after making length of their binary representations equal
- Count minimum bits to flip such that XOR of A and B equal to C
- Count of elements which are equal to the XOR of the next two elements
- Find a number X such that (X XOR A) is minimum and the count of set bits in X and B are equal