Чтобы вычислить вес Хэмминга в 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++. Вы можете выбрать тот, который лучше всего соответствует вашим требованиям и предпочтениям.