假设有两个整数a和b,我们知道a> b。我想计算我应该在b上进行多少次操作来获取a(通过操作我的意思是按位操作将位从1更改为0,反之亦然。我如何计算这种变换的操作次数?
答案 0 :(得分:4)
这将是XOR b中的人口数量(1位数)。
答案 1 :(得分:2)
您正在寻找的是Hamming distance。以下是我在C / C ++中计算它的方法:
unsigned hamdist(unsigned x, unsigned y)
{
unsigned dist = 0;
unsigned val = x ^ y;
// Count the number of set bits (Knuth's algorithm)
while(val)
{
++dist;
val &= val - 1;
}
return dist;
}
答案 2 :(得分:1)
您正在寻找Hamming distance。这是两个数字不同的位数,它为您提供了为了将一个数字转换为另一个数字而需要更改的位数。