将一个整数转换为另一个

时间:2010-07-14 11:59:08

标签: algorithm

假设有两个整数a和b,我们知道a> b。我想计算我应该在b上进行多少次操作来获取a(通过操作我的意思是按位操作将位从1更改为0,反之亦然。我如何计算这种变换的操作次数?

3 个答案:

答案 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。这是两个数字不同的位数,它为您提供了为了将一个数字转换为另一个数字而需要更改的位数。