Programación en C/Ejemplo de cálculo del logaritmo binario

De Wikilibros, la colección de libros de texto de contenido libre.

El siguiente código ejemplo para lenguaje C es un algoritmo para calcular el logaritmo binario (con redondeo hacia abajo) de un entero de 32 bits.[1] El operador '>>' representa un 'cambio no signado a la derecha'. La forma de redondear hacia abajo el logaritmo binario es idéntica a la forma de calcular la posición del bit 1 más significativo.

 /**
  * Returns the floor form of binary logarithm for a 32 bit integer.
  * -1 is returned if n is 0.
  */
 int floorLog2(unsigned int n) {
   int pos = 0;
   if (n >= 1<<16) { n >>= 16; pos += 16; }
   if (n >= 1<< 8) { n >>=  8; pos +=  8; }
   if (n >= 1<< 4) { n >>=  4; pos +=  4; }
   if (n >= 1<< 2) { n >>=  2; pos +=  2; }
   if (n >= 1<< 1) {           pos +=  1; }
   return ((n == 0) ? (-1) : pos);
 }
  1. Warren Jr., Henry S. (2002). Hacker's Delight. Addison Wesley. pp. 215. ISBN 978-0201914658.