2010-07-14 3 views
2

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

ответ

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; 
} 
4

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

1

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

Смежные вопросы