【问题标题】:Transform one integer to another将一个整数转换为另一个整数
【发布时间】:2010-07-14 11:59:08
【问题描述】:

假设给定两个整数a和b,我们知道a>b。我想计算我应该对 b 进行多少次操作才能得到 a (通过操作我的意思是按位操作从 1 更改为 0,反之亦然。我如何计算这种转换的操作数?

【问题讨论】:

    标签: algorithm


    【解决方案1】:

    这将是 XOR b 中的人口计数(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;
      }
      

      【讨论】:

        【解决方案3】:

        您正在寻找Hamming distance。这是两个数字不同的位数,它为您提供了为了将一个数字变为另一个数字所需更改的位数。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-04-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-02-01
          • 1970-01-01
          相关资源
          最近更新 更多