At Sat, 21 Aug 1999 12:54:32 +0200, Nick Hibma wrote:
>
>Does anyone know an inexpensive algorithm (O(1)) to go from an number to
>the next (lower or higher) power of two.
>
>1                      -> 1
>2,3                    -> 2
>4,5,6,7                        -> 4
>8,9,10,11,12,13,14,15  -> 8
>etc.
>
>So %1101 should become either %10000 or %1000.
>
>The only solution I have so far is a table. That is a possibility as the
>the highest number will be 32 I think.

This small prog works at least on x86

=====
#include <sys/types.h>
#include <machine/cpufunc.h>

int 
main(int argc, char **argv){
  int i, j, k;

  sscanf(argv[1], "%d", &i);

  j = 1<<(fls(i)-1);
  k = 1<<(fls(i-1));

  printf("%d %d %d\n", j, i, k);

  return 0;

} 
=====

/Johan K



To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-hackers" in the body of the message

Reply via email to