I assume that the & operator represents bitwise AND operation and the - operator represents the negation operator (i.e. -5 is negation of 5).
In order to get the last set bit (i.e. a 1 bit) in a base 2 number x, we use x & -x
Hence x -= x & -x will remove the last set bit from x.
So, all we need to do is to do bitwise XOR of the given numbers a and b and store their result in a separate variable c so that we know which bits they differ in.
Now we run the following:
while c > 0 do c -= c & -c ans++ done return ans
We are done!
Asuming complexity of bitwise operations is O(1), Complexity of this algorithm is O(k) where k is the number of set bits in the XOR of the given number.