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

09 Aug, 2021
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 smallest positive number whose bitwise AND with 3 is zero Input : X = 10 Output : 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++
Java
Python3
C#
Javascript
// 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 1000000007using namespace std; // Method to find smallest number Y for// a given value of X such that X AND Y is zeroint 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 Codeint main(){    int X = findSmallestNonZeroY(10);    cout << X;} // This code is contributed by mohit kumar 29
// Java program to find smallest number Y for// a given value of X such that X AND Y is zeroimport 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 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 zerodef 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 Codeif __name__ == "__main__" :    X = findSmallestNonZeroY(10);    print(X)     # This code is contributed by AnkitRai01
// C# program to find smallest number Y for// a given value of X such that X AND Y is zerousing 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
<script>// Javascript 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 zerofunction findSmallestNonZeroY(A_num){    // Convert the number into its binary form        let A_binary = (A_num >>> 0).toString(2);        let B = 1;        let len = A_binary.length;        let 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 (let i = 0; i < len; i++) {            let ch = A_binary[len - i - 1];            if (ch == '0') {                B = Math.floor(Math.pow(2.0, i));                break;            }        }        return B;}function bitCount(x){    // To store the count        // of set bits        let setBits = 0;        while (x != 0)        {            x = x & (x - 1);            setBits++;        }        return setBits;} // Driver codelet X = findSmallestNonZeroY(10);document.write(X);  // This code is contributed by unknown2108</script>
1
 
Time Complexity: O(1)Auxiliary Space: O(1)
ankthon
29AjayKumar
Akanksha_Rai
mohit kumar 29
unknown2108
pankajsharmagfg
sumitgumber28
Bitwise-AND
Algorithms
Mathematical
Mathematical
Algorithms
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
SDE SHEET - A Complete Guide for SDE Preparation
DSA Sheet by Love Babbar
How to write a Pseudo Code?
Understanding Time Complexity with Simple Examples
Introduction to Algorithms
Program for Fibonacci numbers
Write a program to print all permutations of a given string
C++ Data Types
Set in C++ Standard Template Library (STL)
Coin Change | DP-7