Методы расчета веса Хэмминга в C++: сдвиг битов, таблица поиска и многое другое

Чтобы вычислить вес Хэмминга в C++, который относится к количеству установленных битов в целом числе, можно использовать несколько методов. Вот несколько примеров:

Метод 1: битовый сдвиг и маскирование

int hammingWeight(unsigned int n) {
    int count = 0;
    while (n) {
        count += n & 1;
        n >>= 1;
    }
    return count;
}

Метод 2: алгоритм Брайана Кернигана

int hammingWeight(unsigned int n) {
    int count = 0;
    while (n) {
        n &= (n - 1);
        count++;
    }
    return count;
}

Метод 3. Таблица поиска

int hammingWeight(unsigned int n) {
    int count = 0;
    static const unsigned char lookup_table[] = {
        0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4
    };
    while (n) {
        count += lookup_table[n & 0xF];
        n >>= 4;
    }
    return count;
}

Метод 4. Встроенные функции (GCC и Clang)

int hammingWeight(unsigned int n) {
    return __builtin_popcount(n);
}

Метод 5: встроенные функции (MSVC)

#include <nmmintrin.h>
int hammingWeight(unsigned int n) {
    return _mm_popcnt_u32(n);
}

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