Битовый счет может быть выполнен несколькими способами, например. с установленным битовым итератором, неустановленным битовым итератором, предварительно вычисленными битами с помощью таблиц поиска или параллельного подсчета. Как я выяснил при поиске в сети, итератор неустановленных битов работает быстро, когда количество неустановленных битов меньше, и задает итератор битов наоборот. Но когда следует использовать параллельный счет, в частности MIT HAKMEM (см. Ниже)? Это кажется довольно быстрым, хотя, вероятно, медленнее, чем таблицы поиска. Всегда ли он лучше по скорости по сравнению с установкой / снятием бита? Есть ли какие-то другие мнения относительно того, что выбрать, кроме скорости и памяти?
int BitCount(unsigned int u) {
unsigned int uCount;
uCount = u - ((u >> 1) & 033333333333) - ((u >> 2) & 011111111111);
return ((uCount + (uCount >> 3)) & 030707070707) % 63;
}