Suppose, I have two numbers A and B. I need to find out how many numbers of bits needed to be changed to convert A to B.
Like:
A = 1101101
B = 1011011
^^ ^^
Here, we need to change 4 bits to convert A to B
How can I do this?
Solution:
1. Calculate XOR of A and B.
a_xor_b = A ^ B
2. Count the set bits in the above calculated XOR result.
countSetBits(a_xor_b)
XOR of two number will have set bits only at those places where A differs from B.
int countSetBits(unsigned int n) { unsigned int count = 0; while (n) { count += n & 1; n >>= 1; } return count; } // get the no. of bits to be flipped to convert 'a' to 'b' int getNoBits(int a, int b) { // xor of 'a' & 'b' will have set bits at those // places where bits of 'a' and 'b' differs unsigned int k = a ^ b; return countSetBits(k); }
#include
int bitcount(int);
int main()
{
int a=2,b=4,c;
c=a^b;
int y=bitcount(c);
printf(“%d Bits needed to be changed!”,y);
return 0;
}
int bitcount(int x)
{
int b;
for(b=0;x!=0;x>>=1)
if(x&01)
b++;
return b;
}