Книга: Программирование для 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;
}
Похожие страницы
- Треугольник в цикле
- Листинг 10.1. (simpleid.c) Отображение идентификаторов пользователя и группы
- Starting SNAT and the POSTROUTING chain
- State NEW packets but no SYN bit set
- Листинг 15.11. Код для загрузки файла с Web-сервера
- 6.2.2. Нахождение границ диапазона
- Часть I Скрываем свое местонахождение и посещаем заблокированные сайты
- Текстовые сообщения процедуры POST
- Использование BIOS POST для определения поломок
- Этапы аутсорсинга в цикле прицельного маркетинга
- Time2Post
- Листинг 3.1. Конфигурационный файл lilo.conf