Bit reversión de un entero, ignorando el tamaño del entero y la endianness
Dado un entero typedef:
typedef unsigned int TYPE;
typedef unsigned long TYPE;
Tengo el siguiente código para invertir los bits de un entero:
TYPE max_bit= (TYPE)-1;
void reverse_int_setup()
{
TYPE bits= (TYPE)max_bit;
while (bits <<= 1)
max_bit= bits;
}
TYPE reverse_int(TYPE arg)
{
TYPE bit_setter= 1, bit_tester= max_bit, result= 0;
for (result= 0; bit_tester; bit_tester>>= 1, bit_setter<<= 1)
if (arg & bit_tester)
result|= bit_setter;
return result;
}
One solo necesita ejecutar reverse_int_setup (), que almacena un número entero con el bit más alto activado, luego cualquier llamada a reverse_int arg) devoluciones arg con sus bits invertidos (para usar como clave para un árbol binario, tomado de un contador creciente, pero eso es más o menos irrelevante).
¿Existe una forma independiente de la plataforma para tener en tiempo de compilación el valor correcto para max_int después de la llamada a reverse_int_setup (); De lo contrario, ¿hay un algoritmo que considere mejor / más delgado que el que tengo para reverse_int ()?
Gracias