Number of mismatching bits in the binary representation of two integers
Given two integers(less than 2^31) A and B. The task is to find the number of bits that are different in their binary representation.
Examples:
Input : A = 12, B = 15 Output : Number of different bits : 2 Explanation: The binary representation of 12 is 1100 and 15 is 1111. So, the number of different bits are 2. Input : A = 3, B = 16 Output : Number of different bits : 3
Approach:
- Run a loop from ‘0’ to ’31’ and right shift the bits of A and B by ‘i’ places, then check whether the bit at the ‘0th’ position is different.
- If the bit is different then increase the count.
- As the numbers are less than 2^31, we only have to run the loop ’32’ times i.e. from ‘0’ to ’31’.
- We can get the 1st bit if we bitwise AND the number by 1.
- At the end of the loop display the count.
Below is the implementation of the above approach:
C++
// C++ implementation of the approach #include <bits/stdc++.h> using namespace std; // compute number of different bits void solve( int A, int B) { int count = 0; // since, the numbers are less than 2^31 // run the loop from '0' to '31' only for ( int i = 0; i < 32; i++) { // right shift both the numbers by 'i' and // check if the bit at the 0th position is different if (((A >> i) & 1) != ((B >> i) & 1)) { count++; } } cout << "Number of different bits : " << count << endl; } // Driver code int main() { int A = 12, B = 15; // find number of different bits solve(A, B); return 0; } |
Java
// Java implementation of the approach import java.io.*; class GFG { // compute number of different bits static void solve( int A, int B) { int count = 0 ; // since, the numbers are less than 2^31 // run the loop from '0' to '31' only for ( int i = 0 ; i < 32 ; i++) { // right shift both the numbers by 'i' and // check if the bit at the 0th position is different if (((A >> i) & 1 ) != ((B >> i) & 1 )) { count++; } } System.out.println( "Number of different bits : " + count); } // Driver code public static void main (String[] args) { int A = 12 , B = 15 ; // find number of different bits solve(A, B); } } // this code is contributed by anuj_67.. |
Python3
# Python3 implementation of the approach # compute number of different bits def solve( A, B): count = 0 # since, the numbers are less than 2^31 # run the loop from '0' to '31' only for i in range ( 0 , 32 ): # right shift both the numbers by 'i' and # check if the bit at the 0th position is different if ((( A >> i) & 1 ) ! = (( B >> i) & 1 )): count = count + 1 print ( "Number of different bits :" ,count) # Driver code A = 12 B = 15 # find number of different bits solve( A, B) # This code is contributed by ihritik |
C#
// C# implementation of the approach using System; class GFG { // compute number of different bits static void solve( int A, int B) { int count = 0; // since, the numbers are less than 2^31 // run the loop from '0' to '31' only for ( int i = 0; i < 32; i++) { // right shift both the numbers by 'i' and // check if the bit at the 0th position is different if (((A >> i) & 1) != ((B >> i) & 1)) { count++; } } Console.WriteLine( "Number of different bits : " + count); } // Driver code public static void Main() { int A = 12, B = 15; // find number of different bits solve(A, B); } } // This code is contributed by ihritik |
PHP
<?php // PHP implementation of the approach // compute number of different bits function solve( $A , $B ) { $count = 0; // since, the numbers are less than 2^31 // run the loop from '0' to '31' only for ( $i = 0; $i < 32; $i ++) { // right shift both the numbers by 'i' and // check if the bit at the 0th position is different if ((( $A >> $i ) & 1) != (( $B >> $i ) & 1)) { $count ++; } } echo "Number of different bits : $count" ; } // Driver code $A = 12; $B = 15; // find number of different bits solve( $A , $B ); // This code is contributed by ihritik ?> |
Output:
Number of different bits : 2