Книга: Программирование для Linux. Профессиональный подход

Листинг 9.1. (bit-pos-loop.c) Нахождение позиции старшего значащего бита в цикле

Листинг 9.1. (bit-pos-loop.c) Нахождение позиции старшего значащего бита в цикле

#include <stdio.h>
#include <stdlib.h>
int main(int argc, char* argv[]) {
 long max = atoi(argv[1]);
 long number;
 long i;
 unsigned position;
 volatile unsigned result;
 /* Повторяем вычисления для большого количества чисел. */
 for (number = 1; number <= max; ++number) {
  /* Сдвигаем число вправо, пока результат не станет
     равным нулю.
     Запоминаем количество операций сдвига. */
 for (i = (number >> 1), position = 0; i != 0; ++position)
  i >>= 1;
  /* Позиция старшего значащего бита — это общее число
     операций сдвига, кроме первой. */
  result = position;
 }
 return 0;
}

Оглавление книги


Генерация: 1.208. Запросов К БД/Cache: 3 / 1
поделиться
Вверх Вниз