Bit-Umkehr einer ganzen Zahl zu ignorieren integer Größe und endianness

Gegeben eine Ganzzahl typedef:

typedef unsigned int TYPE;

oder

typedef unsigned long TYPE;

Ich habe den folgenden code zum umkehren der bits eines integer:

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;
}

Muss man nur noch zuerst ausführen reverse_int_setup () - speichert eine ganze Zahl mit dem höchsten bit eingeschaltet, dann wird jeder Aufruf zum reverse_int(arg) gibt arg mit seine bits invertiert (werden als Schlüssel verwendet, um einen binären Baum, ergriffen von einer zunehmenden Zähler, aber das ist mehr oder weniger irrelevant).

Gibt es eine Plattform-unabhängige Art und Weise zu haben, in compile-time den richtigen Wert für max_int nach dem Aufruf reverse_int_setup(); Ansonsten gibt es einen Algorithmus, den Sie betrachten besser/schlanker als die, die ich habe für reverse_int()?

Dank.

InformationsquelleAutor tzot | 2008-09-15
Schreibe einen Kommentar