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

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

 // C++ program to find smallest number Y for// a given value of X such that X AND Y is zero#include #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

Java

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

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

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

Javascript


Output:
1

Time Complexity: O(1)
Auxiliary Space: O(1)

My Personal Notes arrow_drop_up