【发布时间】:2010-07-14 11:59:08
【问题描述】:
假设给定两个整数a和b,我们知道a>b。我想计算我应该对 b 进行多少次操作才能得到 a (通过操作我的意思是按位操作从 1 更改为 0,反之亦然。我如何计算这种转换的操作数?
【问题讨论】:
标签: algorithm
假设给定两个整数a和b,我们知道a>b。我想计算我应该对 b 进行多少次操作才能得到 a (通过操作我的意思是按位操作从 1 更改为 0,反之亦然。我如何计算这种转换的操作数?
【问题讨论】:
标签: algorithm
这将是 XOR b 中的人口计数(1 位的数量)。
【讨论】:
您正在查找的内容称为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;
}
【讨论】:
您正在寻找Hamming distance。这是两个数字不同的位数,它为您提供了为了将一个数字变为另一个数字所需更改的位数。
【讨论】: