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++
#include <bits/stdc++.h>
using namespace std;
void solve( int A, int B)
{
int count = 0;
for ( int i = 0; i < 32; i++) {
if (((A >> i) & 1) != ((B >> i) & 1)) {
count++;
}
}
cout << "Number of different bits : " << count << endl;
}
int main()
{
int A = 12, B = 15;
solve(A, B);
return 0;
}
|
Java
import java.io.*;
class GFG {
static void solve( int A, int B)
{
int count = 0 ;
for ( int i = 0 ; i < 32 ; i++) {
if (((A >> i) & 1 ) != ((B >> i) & 1 )) {
count++;
}
}
System.out.println( "Number of different bits : " + count);
}
public static void main (String[] args) {
int A = 12 , B = 15 ;
solve(A, B);
}
}
|
Python3
def solve( A, B):
count = 0
for i in range ( 0 , 32 ):
if ((( A >> i) & 1 ) ! = (( B >> i) & 1 )):
count = count + 1
print ( "Number of different bits :" ,count)
A = 12
B = 15
solve( A, B)
|
C#
using System;
class GFG
{
static void solve( int A, int B)
{
int count = 0;
for ( int i = 0; i < 32; i++) {
if (((A >> i) & 1) != ((B >> i) & 1)) {
count++;
}
}
Console.WriteLine( "Number of different bits : " + count);
}
public static void Main()
{
int A = 12, B = 15;
solve(A, B);
}
}
|
PHP
<?php
function solve( $A , $B )
{
$count = 0;
for ( $i = 0; $i < 32; $i ++) {
if ((( $A >> $i ) & 1) != (( $B >> $i ) & 1)) {
$count ++;
}
}
echo "Number of different bits : $count" ;
}
$A = 12;
$B = 15;
solve( $A , $B );
?>
|
Javascript
<script>
function solve(A, B)
{
var count = 0;
for (i = 0; i < 32; i++)
{
if (((A >> i) & 1) != ((B >> i) & 1))
{
count++;
}
}
document.write( "Number of different bits : " +
count);
}
var A = 12, B = 15;
solve(A, B);
</script>
|
Output
Number of different bits : 2
Time Complexity: O(32)
Auxiliary Space: O(1)
A different approach using xor(^):
- Find XOR (^) of two number, say A and B.
- And let their result of XOR(^) of A & B be C;
- Count number of set bits (1’s ) in the binary representation of C;
- Return the count;
Example:
- Let A = 10 (01010) and B = 20 (10100)
- After xor of A and B, we get XOR = 11110. ( Check XOR table if necessary).
- Counting the number of 1’s in XOR gives the count of bit differences in A and B. (using Brian Kernighan’s Algorithm)
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
int solve( int A, int B)
{
int XOR = A ^ B;
int count = 0;
while (XOR) {
XOR = XOR & (XOR - 1);
count++;
}
return count;
}
int main()
{
int A = 12, B = 15;
int result = solve(A, B);
cout << "Number of different bits : " << result;
return 0;
}
|
Java
import java.io.*;
class GFG {
static int solve( int A, int B)
{
int XOR = A ^ B;
int count = 0 ;
while (XOR > 0 ) {
XOR = XOR & (XOR - 1 );
count++;
}
return count;
}
public static void main(String[] args)
{
int A = 12 , B = 15 ;
int result = solve(A, B);
System.out.println( "Number of different bits : "
+ result);
}
}
|
Python3
def solve(A, B):
XOR = A ^ B
count = 0
while (XOR):
XOR = XOR & (XOR - 1 )
count + = 1
return count
result = solve( 3 , 16 )
print ( "Number of different bits : " , result)
|
C#
using System;
class GFG {
static int solve( int A, int B)
{
int XOR = A ^ B;
int count = 0;
while (XOR > 0) {
XOR = XOR & (XOR - 1);
count++;
}
return count;
}
public static void Main()
{
int A = 12, B = 15;
int result = solve(A, B);
Console.WriteLine( "Number of different bits : "
+ result);
}
}
|
Javascript
<script>
function solve(A, B)
{
var XOR = A ^ B;
var count = 0;
while (XOR > 0) {
XOR = XOR & (XOR - 1);
count++;
}
return count;
}
var A = 12, B = 15;
var result = solve(A, B);
document.write( "Number of different bits : "
+ result);
</script>
|
Output
Number of different bits : 2
Time Complexity: O(log (A^B))
Auxiliary Space: O(1)
Brian Kernighan’s Algorithm
Last Updated :
12 Oct, 2022
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...