/***********************************************************************
* Code listing from "Advanced Linux Programming," by CodeSourcery LLC *
* Copyright (C) 2001 by New Riders Publishing *
* See COPYRIGHT for license information. *
***********************************************************************/
#include
#include
int main (int argc, char* argv[])
{
long max = atoi (argv[1]);
long number;
long i;
unsigned position;
volatile unsigned result;
/* Repeat the operation for a large number of values. */
for (number = 1; number <= max; ++number) {
/* Repeatedly shift the number to the right, until the result is
zero. Keeep count of the number of shifts this requires. */
for (i = (number >> 1), position = 0; i != 0; ++position)
i >>= 1;
/* The position of the most significant set bit is the number of
shifts we needed after the first one. */
result = position;
}
return 0;
}