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 = 3Output :4

4 is the samllest positive number whose bitwise AND with 3 is zero

Input :X = 10Output :1

**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 <bits/stdc++.h>` `#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<length;i++)` ` ` `{` ` ` `char` `ch = A_binary[length - i - 1];` ` ` ` ` `if` `(ch == ` `'0'` `)` ` ` `{` ` ` `B = ` `pow` `(2.0, i);` ` ` `break` `;` ` ` `}` ` ` `}` ` ` `return` `B;` `}` ` ` `// Driver Code` `int` `main()` `{` ` ` `int` `X = findSmallestNonZeroY(10);` ` ` `cout << X;` `}` ` ` `// This code is contributed by mohit kumar 29` |

## 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

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****.**