У меня есть 8-разрядное целое число без знака, и я хотел бы знать, сколько его битов установлено на 1. Существует тривиальный путь от AND-ing (&) с 0x01, 0x02, 0x04, 0x08, 0x0F, 0x10, 0x20, 0x40, 0x80, 0xF0 и приращением переменной для каждой из них, которая не равна нулю, но я бы хотел услышать более сложные решения.Учитывая uint8_t, узнайте, сколько бит установлено
0
A
ответ
2
Используйте builtin:
int bits_set(uint8_t x) {
return __builtin_popcount(x);
}
Или сделайте таблицу:
int bits_set(uint8_t x) {
// easy enough to generate this
static const uint8_t table[] = {0, 1, 1, 2, 1, 2, ... };
// then it's just a lookup
return table[x];
}
2
Вы можете использовать время цикла с bitshifting:
uint8_t someInt = 13;
int num_ones = 0;
while (someInt)
{
num_ones += someInt & 1;
someInt = someInt >> 1;
}
Смежные вопросы
- 1. uint8_t - 8 бит guarentee
- 2. Узнайте, установлено ли приложение
- 3. Узнайте, сколько загруженных классов
- 4. Сколько бит имеет значение enum?
- 5. Узнайте, сколько пользователей используют мое приложение
- 6. Узнайте, сколько у него числа
- 7. Узнайте, сколько памяти у iPhone?
- 8. Узнайте, сколько памяти используется скриптом
- 9. Узнайте, установлено ли обновление семейства .NET
- 10. Сколько бит в символе?
- 11. Сколько бит является «словом»?
- 12. Сколько бит составляет байт?
- 13. Узнайте, сколько возвращаемых значений имеет функция
- 14. Учитывая число n, узнайте, сколько чисел имеет цифру 2 в диапазоне 0 ... n
- 15. Узнайте о «бит» существующей ОС в MSBuild
- 16. Узнайте, сколько цифр число, как в Maple
- 17. Узнайте, сколько пикселей между началом двух элементов?
- 18. Узнайте, сколько аппаратных счетчиков производительности имеет процессор
- 19. Узнайте, сколько памяти используется объектом в C#?
- 20. Узнайте, сколько вкладок открыто в IE
- 21. Узнайте, сколько потоков работает одновременно в функции
- 22. Узнайте, сколько страниц памяти использует процесс linux
- 23. Haskell: узнайте, сколько байтов получит выражение Get
- 24. Узнайте, сколько оперативной памяти используется в потоке
- 25. Monotouch Узнайте, сколько ОЗУ осталось на iPad
- 26. Узнайте, сколько двоичных цифр конкретное число имеет
- 27. Узнайте, сколько потоков работает мое приложение?
- 28. Узнайте, сколько памяти используется объектом в Python
- 29. Node.js: сколько бит в строке?
- 30. Сколько бит используется для экспоненты
Вы можете использовать петлю и бит сдвиг. –
Кроме ответа Барри, здесь некоторые интересные методы: http://graphics.stanford.edu/~seander/bithacks.html#CountBitsSetNaive –