Преобразовать одно целое число в другое - PullRequest
2 голосов
/ 14 июля 2010

Предположим, что даны два целых числа a и b, и мы знаем, что a> b. Я хочу вычислить, сколько операций я должен сделать на b, чтобы получить a (под операцией я подразумеваю, что побитовые операции меняются с 1 на 0 и наоборот. Как подсчитать количество операций для такого преобразования?

Ответы [ 3 ]

4 голосов
/ 14 июля 2010

Это будет счетчик чисел (число 1 бит) в XOR b.

2 голосов
/ 14 июля 2010

То, что вы ищете, называется расстоянием Хэмминга .Вот как я вычисляю это в 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;
}
1 голос
/ 14 июля 2010

Вы ищете расстояние Хэмминга .Это число битов, в которых эти два числа различаются, что дает вам количество бит, которое необходимо изменить, чтобы превратить одно число в другое.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...