Учитывая std::bitset<64> bits
с любым количеством битов и битовой позицией X
(0-63)
Каков наиболее эффективный способ подсчета бит в позиции X или ниже или возврата 0, если бит в X не установлен.
Примечание. Если бит установлен, возврат всегда будет не менее 1
Метод грубой силы очень медленный:
int countupto(std::bitset<64> bits, int X)
{
if (!bits[X]) return 0;
int total=1;
for (int i=0; i < X; ++i)
{
total+=bits[i];
}
return total;
}
Метод count()
метода bitset
даст вам popcount
всех битов, но bitset
не поддерживает диапазоны
Примечание. Это не дубликат Как подсчитать количество битов в 32-разрядном целое?, поскольку он запрашивает обо всех битах, а не в диапазоне 0 через X