Programación en C/Ejemplo de cálculo del logaritmo binario
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);
}
- ↑ Warren Jr., Henry S. (2002). Hacker's Delight. Addison Wesley. pp. 215. ISBN 978-0201914658.