📌  相关文章
📜  通过将公共置位翻转为两个给定的整数而形成的数字

📅  最后修改于: 2021-04-23 19:00:05             🧑  作者: Mango

给定两个正整数AB ,任务是翻转AB中的公共设置位。

例子:

天真的方法:解决此问题的最简单方法是检查AB的i位是否为集合。如果发现是正确的,则翻转AB的i位。最后,打印AB的更新值。

下面是上述方法的实现:

C++
// C++ program to implement
// the above approach
 
#include 
using namespace std;
 
// Function to flip bits of A and B
// which are set bits in A and B
void flipBitsOfAandB(int A, int B)
{
    // Iterater all possible bits
    // of A and B
    for (int i = 0; i < 32; i++) {
 
        // If ith bit is set in
        // both A and B
        if ((A & (1 << i)) && (B & (1 << i))) {
 
            // Clear i-th bit of A
            A = A ^ (1 << i);
 
            // Clear i-th bit of B
            B = B ^ (1 << i);
        }
    }
 
    // Print A and B
    cout << A << " " << B;
}
 
// Driver Code
int main()
{
    int A = 7, B = 4;
 
    flipBitsOfAandB(A, B);
 
    return 0;
}


Java
// Java program to implement
// the above approach
import java.util.*;
   
class GFG{
   
// Function to flip bits of A and B
// which are set bits in A and B
static void flipBitsOfAandB(int A, int B)
{
     
    // Iterater all possible bits
    // of A and B
    for(int i = 0; i < 32; i++)
    {
         
        // If ith bit is set in
        // both A and B
        if (((A & (1 << i)) &
             (B & (1 << i))) != 0)
        {
             
            // Clear i-th bit of A
            A = A ^ (1 << i);
  
            // Clear i-th bit of B
            B = B ^ (1 << i);
        }
    }
  
    // Print A and B
    System.out.print(A + " " + B);
}
   
// Driver Code
public static void main(String[] args)
{
    int A = 7, B = 4;
  
    flipBitsOfAandB(A, B);
}
}
 
// This code is contributed by code_hunt


Python3
# Python3 program to implement
# the above approach
 
# Function to flip bits of A and B
# which are set in both of them
def flipBitsOfAandB(A, B):
     
    # Iterate all possible bits of
    # A and B
    for i in range(0, 32):
         
        # If ith bit is set in
        # both A and B
        if ((A & (1 << i)) and
            (B & (1 << i))):
             
            # Clear i-th bit of A
            A = A ^ (1 << i)
 
            # Clear i-th bit of B
            B = B ^ (1 << i)
             
    print(A, B)
 
# Driver Code 
if __name__ == "__main__" :
     
    A = 7
    B = 4
     
    flipBitsOfAandB(A, B)
     
# This code is contributed by Virusbuddah_


C#
// C# program to implement
// the above approach
using System;
 
class GFG{
 
// Function to flip bits of A and B
// which are set bits in A and B
static void flipBitsOfAandB(int A, int B)
{
     
    // Iterater all possible bits
    // of A and B
    for(int i = 0; i < 32; i++)
    {
         
        // If ith bit is set in
        // both A and B
        if (((A & (1 << i)) &
             (B & (1 << i))) != 0)
        {
             
            // Clear i-th bit of A
            A = A ^ (1 << i);
 
            // Clear i-th bit of B
            B = B ^ (1 << i);
        }
    }
 
    // Print A and B
    Console.Write(A + " " + B);
}
 
// Driver Code
public static void Main(string[] args)
{
    int A = 7, B = 4;
 
    flipBitsOfAandB(A, B);
}
}
 
// This code is contributed by chitranayal


Javascript


C++
// C++ program to implement
// the above approach
 
#include 
using namespace std;
 
// Function to flip bits of A and B
// which are set in both of them
void flipBitsOfAandB(int A, int B)
{
 
    // Clear the bits of A which
    // are set in both A and B
    A = A ^ (A & B);
 
    // Clear the bits of B which
    // are set in both A and B
    B = B ^ (A & B);
 
    // Print updated A and B
    cout << A << " " << B;
}
 
// Driver Code
int main()
{
    int A = 10, B = 20;
 
    flipBitsOfAandB(A, B);
 
    return 0;
}


Java
// Java program to implement
// the above approach
import java.util.*;
    
class GFG{
    
// Function to flip bits of A and B
// which are set in both of them
static void flipBitsOfAandB(int A, int B)
{
     
    // Clear the bits of A which
    // are set in both A and B
    A = A ^ (A & B);
     
    // Clear the bits of B which
    // are set in both A and B
    B = B ^ (A & B);
  
    // Print updated A and B
    System.out.print(A + " " + B);
}
    
// Driver Code
public static void main(String[] args)
{
    int A = 10, B = 20;
     
    flipBitsOfAandB(A, B);
}
}
 
// This code is contributed by sanjoy_62


Python3
# Python3 program to implement
# the above approach
 
# Function to flip bits of A and B
# which are set in both of them
def flipBitsOfAandB(A, B):
     
    # Clear the bits of A which
    # are set in both A and B
    A = A ^ (A & B)
 
    # Clear the bits of B which
    # are set in both A and B
    B = B ^ (A & B)
 
    # Print updated A and B
    print(A, B)
 
# Driver Code 
if __name__ == "__main__" :
     
    A = 10
    B = 20
     
    flipBitsOfAandB(A, B)
     
# This code is contributed by Virusbuddah_


C#
// C# program to implement
// the above approach
using System;
 
class GFG{
    
// Function to flip bits of A and B
// which are set in both of them
static void flipBitsOfAandB(int A, int B)
{
   
    // Clear the bits of A which
    // are set in both A and B
    A = A ^ (A & B);
     
    // Clear the bits of B which
    // are set in both A and B
    B = B ^ (A & B);
  
    // Print updated A and B
    Console.Write(A + " " + B);
}
    
// Driver Code
public static void Main(String[] args)
{
    int A = 10, B = 20;
     
    flipBitsOfAandB(A, B);
}
}
 
// This code is contributed by Amit Katiyar


Javascript


输出:
3 0

时间复杂度: O(32)
辅助空间: O(1)

高效方法:为了优化上述方法,该思想基于以下观察结果:

请按照以下步骤解决问题:

  • 更新A =(A ^(A&B))
  • 更新B =(B ^(A&B))
  • 最后,打印AB的更新值。

下面是上述方法的实现:

C++

// C++ program to implement
// the above approach
 
#include 
using namespace std;
 
// Function to flip bits of A and B
// which are set in both of them
void flipBitsOfAandB(int A, int B)
{
 
    // Clear the bits of A which
    // are set in both A and B
    A = A ^ (A & B);
 
    // Clear the bits of B which
    // are set in both A and B
    B = B ^ (A & B);
 
    // Print updated A and B
    cout << A << " " << B;
}
 
// Driver Code
int main()
{
    int A = 10, B = 20;
 
    flipBitsOfAandB(A, B);
 
    return 0;
}

Java

// Java program to implement
// the above approach
import java.util.*;
    
class GFG{
    
// Function to flip bits of A and B
// which are set in both of them
static void flipBitsOfAandB(int A, int B)
{
     
    // Clear the bits of A which
    // are set in both A and B
    A = A ^ (A & B);
     
    // Clear the bits of B which
    // are set in both A and B
    B = B ^ (A & B);
  
    // Print updated A and B
    System.out.print(A + " " + B);
}
    
// Driver Code
public static void main(String[] args)
{
    int A = 10, B = 20;
     
    flipBitsOfAandB(A, B);
}
}
 
// This code is contributed by sanjoy_62

Python3

# Python3 program to implement
# the above approach
 
# Function to flip bits of A and B
# which are set in both of them
def flipBitsOfAandB(A, B):
     
    # Clear the bits of A which
    # are set in both A and B
    A = A ^ (A & B)
 
    # Clear the bits of B which
    # are set in both A and B
    B = B ^ (A & B)
 
    # Print updated A and B
    print(A, B)
 
# Driver Code 
if __name__ == "__main__" :
     
    A = 10
    B = 20
     
    flipBitsOfAandB(A, B)
     
# This code is contributed by Virusbuddah_

C#

// C# program to implement
// the above approach
using System;
 
class GFG{
    
// Function to flip bits of A and B
// which are set in both of them
static void flipBitsOfAandB(int A, int B)
{
   
    // Clear the bits of A which
    // are set in both A and B
    A = A ^ (A & B);
     
    // Clear the bits of B which
    // are set in both A and B
    B = B ^ (A & B);
  
    // Print updated A and B
    Console.Write(A + " " + B);
}
    
// Driver Code
public static void Main(String[] args)
{
    int A = 10, B = 20;
     
    flipBitsOfAandB(A, B);
}
}
 
// This code is contributed by Amit Katiyar

Java脚本


输出:
10 20

时间复杂度: O(1)
辅助空间: O(1)