Эффективные побитовые операции для подсчета битов или поиска правого | левого большинство

Для целого числа без знака я должен выполнить следующие операции:

  1. Подсчитать количество битов, установленных на 1
  2. Найти индекс крайний левый 1 бит
  3. Найдите индекс самого правого 1 бита

(операция не должна зависеть от архитектуры).

Я сделал это с помощью побитового сдвига, но мне нужно выполнить итерацию почти все биты (es.32). Например, подсчет единиц:

unsigned int number= ...;
while(number != 0){
    if ((number & 0x01) != 0)
        ++count;
    number >>=1;
}

Остальные операции аналогичны.

Итак, мой вопрос: есть ли более быстрый способ сделать это?

5
задан Heisenbug 1 February 2012 в 09:17
поделиться