# Find smallest positive number Y such that Bitwise AND of X and Y is Zero

Given an integer X. The task is to find the smallest positive number Y(> 0) such that X AND Y is zero.

Examples:

Input : X = 3
Output : 4
4 is the samllest positive number whose bitwise AND with 3 is zero

Input : X = 10
Output : 1

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

Approach :
There are 2 cases :

• If the binary representation of X contains all 1s, in that case, all the bits of Y should be 0 to make the result of AND operation is zero. Then X+1 is our answer which is the first positive integer.
• If the binary representation of X doesn’t contain all 1s, in that case, find the first position in X at which bit is 0. Then our answer will be power(2, position)

Below is the implementation of the above approach :

## C++

 `// C++ program to find smallest number Y for ` `// a given value of X such that X AND Y is zero ` `#include ` `#define mod 1000000007 ` `using` `namespace` `std; ` ` `  `// Method to find smallest number Y for ` `// a given value of X such that X AND Y is zero ` `int` `findSmallestNonZeroY(``int` `A_num) ` `{ ` ` `  `    ``// Convert the number into its binary form ` `    ``string A_binary = bitset<8>(A_num).to_string(); ` `    ``int` `B = 1; ` `    ``int` `length = A_binary.size(); ` `    ``int` `no_ones = __builtin_popcount(A_num); ` ` `  `    ``// Case 1 : If all bits are ones, ` `    ``// then return the next number ` `    ``if` `(length == no_ones ) ` `        ``return` `A_num + 1; ` ` `  `    ``// Case 2 : find the first 0-bit ` `    ``// index and return the Y ` `    ``for` `(``int` `i=0;i

## Java

 `// Java program to find smallest number Y for  ` `// a given value of X such that X AND Y is zero ` `import` `java.lang.*; ` ` `  `public` `class` `Main { ` `     `  `    ``// Method to find smallest number Y for  ` `    ``// a given value of X such that X AND Y is zero ` `    ``static` `long` `findSmallestNonZeroY(``long` `A_num) ` `    ``{ ` `        ``// Convert the number into its binary form ` `        ``String A_binary = Long.toBinaryString(A_num); ` `        ``long` `B = ``1``; ` `        ``int` `len = A_binary.length(); ` `        ``int` `no_ones = Long.bitCount(A_num); ` ` `  `        ``// Case 1 : If all bits are ones,  ` `        ``// then return the next number ` `        ``if` `(len == no_ones) { ` `            ``return` `A_num + ``1``; ` `        ``} ` ` `  `        ``// Case 2 : find the first 0-bit  ` `        ``// index and return the Y ` `        ``for` `(``int` `i = ``0``; i < len; i++) { ` `            ``char` `ch = A_binary.charAt(len - i - ``1``); ` `            ``if` `(ch == ``'0'``) { ` `                ``B = (``long``)Math.pow(``2.0``, (``double``)i); ` `                ``break``; ` `            ``} ` `        ``} ` `        ``return` `B; ` `    ``} ` `     `  `    ``// Driver code ` `    ``public` `static` `void` `main(String[] args) ` `    ``{ ` `        ``long` `X = findSmallestNonZeroY(``10``); ` `        ``System.out.println(X); ` `    ``} ` `} `

## Python3

 `# Python3 program to find smallest number Y for  ` `# a given value of X such that X AND Y is zero ` ` `  `# Method to find smallest number Y for  ` `# a given value of X such that X AND Y is zero ` `def` `findSmallestNonZeroY(A_num) : ` `     `  `    ``# Convert the number into its binary form ` `    ``A_binary ``=` `bin``(A_num)  ` `    ``B ``=` `1` `    ``length ``=` `len``(A_binary); ` `    ``no_ones ``=` `(A_binary).count(``'1'``); ` `     `  `    ``# Case 1 : If all bits are ones,  ` `    ``# then return the next number ` `    ``if` `length ``=``=` `no_ones : ` `        ``return` `A_num ``+` `1``; ` `         `  `    ``# Case 2 : find the first 0-bit  ` `    ``# index and return the Y  ` `    ``for` `i ``in` `range``(length) :  ` `            ``ch ``=` `A_binary[length ``-` `i ``-` `1``]; ` `             `  `            ``if` `(ch ``=``=` `'0'``) : ` `                ``B ``=` `pow``(``2.0``, i);  ` `                ``break``;  ` `                 `  `    ``return` `B;  ` ` `  `# Driver Code ` `if` `__name__ ``=``=` `"__main__"` `: ` `    ``X ``=` `findSmallestNonZeroY(``10``); ` `    ``print``(X) ` `     `  `# This code is contributed by AnkitRai01 `

## C#

 `// C# program to find smallest number Y for  ` `// a given value of X such that X AND Y is zero ` `using` `System; ` `     `  `class` `GFG  ` `{ ` `     `  `    ``// Method to find smallest number Y for  ` `    ``// a given value of X such that X AND Y is zero ` `    ``static` `long` `findSmallestNonZeroY(``long` `A_num) ` `    ``{ ` `        ``// Convert the number into its binary form ` `        ``String A_binary = Convert.ToString(A_num, 2); ` `        ``long` `B = 1; ` `        ``int` `len = A_binary.Length; ` `        ``int` `no_ones = bitCount(A_num); ` ` `  `        ``// Case 1 : If all bits are ones,  ` `        ``// then return the next number ` `        ``if` `(len == no_ones)  ` `        ``{ ` `            ``return` `A_num + 1; ` `        ``} ` ` `  `        ``// Case 2 : find the first 0-bit  ` `        ``// index and return the Y ` `        ``for` `(``int` `i = 0; i < len; i++) ` `        ``{ ` `            ``char` `ch = A_binary[len - i - 1]; ` `            ``if` `(ch == ``'0'``)  ` `            ``{ ` `                ``B = (``long``)Math.Pow(2.0, (``double``)i); ` `                ``break``; ` `            ``} ` `        ``} ` `        ``return` `B; ` `    ``} ` `     `  `    ``static` `int` `bitCount(``long` `x) ` `    ``{ ` `        ``// To store the count ` `        ``// of set bits ` `        ``int` `setBits = 0; ` `        ``while` `(x != 0)  ` `        ``{ ` `            ``x = x & (x - 1); ` `            ``setBits++; ` `        ``} ` `        ``return` `setBits; ` `    ``}  ` `     `  `    ``// Driver code ` `    ``public` `static` `void` `Main(String[] args) ` `    ``{ ` `        ``long` `X = findSmallestNonZeroY(10); ` `        ``Console.WriteLine(X); ` `    ``} ` `} ` ` `  `// This code is contributed by 29AjayKumar `

Output:

```1
```

My Personal Notes arrow_drop_up Check out this Author's contributed articles.

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 Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.