Given two integers, the task is to find the hamming distance between two integers. Hamming Distance between two integers is the number of bits that are different at the same position in both numbers.
Examples:
Input: n1 = 9, n2 = 14
Output: 3
9 = 1001, 14 = 1110
No. of Different bits = 3
Input: n1 = 4, n2 = 8
Output: 2
Approach:
- Calculate the XOR of two numbers.
- Count the number of set bits.
Below is the implementation of above approach:
C++
#include <bits/stdc++.h>
using namespace std;
int hammingDistance( int n1, int n2)
{
int x = n1 ^ n2;
int setBits = 0;
while (x > 0) {
setBits += x & 1;
x >>= 1;
}
return setBits;
}
int main()
{
int n1 = 9, n2 = 14;
cout << hammingDistance(9, 14) << endl;
return 0;
}
|
C
#include <stdio.h>
int hammingDistance( int n1, int n2)
{
int x = n1 ^ n2;
int setBits = 0;
while (x > 0) {
setBits += x & 1;
x >>= 1;
}
return setBits;
}
int main()
{
int n1 = 9, n2 = 14;
printf ( "%d\n" , hammingDistance(9, 14));
return 0;
}
|
Java
class GFG
{
static int hammingDistance( int n1, int n2)
{
int x = n1 ^ n2;
int setBits = 0 ;
while (x > 0 )
{
setBits += x & 1 ;
x >>= 1 ;
}
return setBits;
}
public static void main(String[] args)
{
int n1 = 9 , n2 = 14 ;
System.out.println(hammingDistance(n1, n2));
}
}
|
Python3
def hammingDistance(n1, n2) :
x = n1 ^ n2
setBits = 0
while (x > 0 ) :
setBits + = x & 1
x >> = 1
return setBits
if __name__ = = '__main__' :
n1 = 9
n2 = 14
print (hammingDistance( 9 , 14 ))
|
C#
class GFG
{
static int hammingDistance( int n1, int n2)
{
int x = n1 ^ n2;
int setBits = 0;
while (x > 0)
{
setBits += x & 1;
x >>= 1;
}
return setBits;
}
static void Main()
{
int n1 = 9, n2 = 14;
System.Console.WriteLine(hammingDistance(n1, n2));
}
}
|
PHP
<?PHP
function hammingDistance( $n1 , $n2 )
{
$x = $n1 ^ $n2 ;
$setBits = 0;
while ( $x > 0)
{
$setBits += $x & 1;
$x >>= 1;
}
return $setBits ;
}
$n1 = 9;
$n2 = 14;
echo (hammingDistance(9, 14));
?>
|
Javascript
<script>
function hammingDistance(n1, n2)
{
let x = n1 ^ n2;
let setBits = 0;
while (x > 0) {
setBits += x & 1;
x >>= 1;
}
return setBits;
}
let n1 = 9, n2 = 14;
document.write(hammingDistance(9, 14));
</script>
|
Note: No. of set bits can be count using __builtin_popcount() function.
Approach 2:
1. Calculate the maximum of both the numbers.
2.Check the set bits for both at each position.
C++
#include <bits/stdc++.h>
using namespace std;
int hammingDistance( int x, int y)
{
int ans = 0;
int m = max(x, y);
while (m) {
int c1 = x & 1;
int c2 = y & 1;
if (c1 != c2)
ans += 1;
m = m >> 1;
x = x >> 1;
y = y >> 1;
}
return ans;
}
int main()
{
int n1 = 4, n2 = 8;
int hdist = hammingDistance(n1, n2);
cout << hdist << endl;
return 0;
}
|
Java
import java.io.*;
class GFG {
static int hammingDistance( int x, int y)
{
int ans = 0 ;
int m = Math.max(x, y);
while (m> 0 ) {
int c1 = x & 1 ;
int c2 = y & 1 ;
if (c1 != c2)
ans += 1 ;
m = m >> 1 ;
x = x >> 1 ;
y = y >> 1 ;
}
return ans;
}
public static void main(String args[])
{
int n1 = 4 , n2 = 8 ;
int hdist = hammingDistance(n1, n2);
System.out.println(hdist);
}
}
|
Python3
def hammingDistance(x, y):
ans = 0
m = max (x, y)
while (m):
c1 = x & 1
c2 = y & 1
if (c1 ! = c2):
ans + = 1
m = m >> 1
x = x >> 1
y = y >> 1
return ans
n1 = 4
n2 = 8
hdist = hammingDistance(n1, n2)
print (hdist)
|
C#
using System;
public class GFG
{
static int hammingDistance( int x, int y)
{
int ans = 0;
int m = Math.Max(x, y);
while (m > 0) {
int c1 = x & 1;
int c2 = y & 1;
if (c1 != c2)
ans += 1;
m = m >> 1;
x = x >> 1;
y = y >> 1;
}
return ans;
}
public static void Main( string [] args)
{
int n1 = 4, n2 = 8;
int hdist = hammingDistance(n1, n2);
Console.WriteLine(hdist);
}
}
|
Javascript
<script>
function hammingDistance(x,y)
{
let ans = 0;
let m = Math.max(x, y);
while (m) {
let c1 = x & 1;
let c2 = y & 1;
if (c1 != c2)
ans += 1;
m = m >> 1;
x = x >> 1;
y = y >> 1;
}
return ans;
}
let n1 = 4,n2 = 8;
let hdist = hammingDistance(n1, n2);
document.write(hdist, "</br>" );
</script>
|