📌  相关文章
📜  找到最小的正数Y,以使X和Y的按位与为零

📅  最后修改于: 2021-04-22 09:03:55             🧑  作者: Mango

给定整数X。任务是找到最小的正数Y (> 0),以使X AND Y为零

例子:

方法 :
有2种情况:

  • 如果X的二进制表示形式全为1,则Y的所有位应为0,以使AND运算的结果为零。那么X + 1是我们的答案,它是第一个正整数。
  • 如果X的二进制表示不含有全1,在这种情况下,找到X中的第一位置,在该位为0。那么我们的答案将是power(2,position)

下面是上述方法的实现:

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


输出:
1