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

Respuestas a la pregunta(12)

Su respuesta a la pregunta