erstes/letztes gesetztes Bit eines Integers



  • SG1 schrieb:

    "naiv invertieren" (für mich heisst das per Schleife)

    Ach so. 'tschuldige die Verwirrung.

    pittbull schrieb:

    hier zum beispiel n algo um das msb zu finden

    unsigned int msb32(register unsigned int x)
    {
            x |= (x >> 1);
            x |= (x >> 2);
            x |= (x >> 4);
            x |= (x >> 8);
            x |= (x >> 16);
            return(x & ~(x >> 1));
    }
    

    quelle: http://aggregate.org/MAGIC/#Most Significant 1 Bit

    Eine tolle Seite, danke.

    Hab mir den Algorithmus mal veranschaulicht, falls es sonst noch wer braucht:
    einmal mit 0x00129100
    einmal mit 0x80000000
    Sehr elegante Lösung.

    Wieso wird eigentlich Wert darauf gelegt, dass ein unsigned int zurückgegeben wird?



  • User1291 schrieb:

    Wieso wird eigentlich Wert darauf gelegt, dass ein unsigned int zurückgegeben wird?

    bei rechts-shift mit negativen werten kommen einsen rein. das funzt dann nicht mehr.



  • pittbull schrieb:

    bei rechts-shift mit negativen werten kommen einsen rein.

    Nicht unbedingt. Bei signed Typen ist das Verhalten vom Standard nicht definiert. Es kann eine 0 oder das MSB eingeschoben werden.



  • pittbull schrieb:

    bei rechts-shift mit negativen werten kommen einsen rein. das funzt dann nicht mehr.

    Ist bekannt, danke.

    Die Frage war aber

    Wieso wird eigentlich Wert darauf gelegt, dass ein unsigned int zurückgegeben wird?

    Sprich wieso reicht es nicht, x als unsigned zu deklarieren und die Maske als "gewöhnlicher" int zurückzugeben?



  • irrelevant für die Rückgabe, das war gerade gefragt.

    Den Rückgabetyp mache ich da normalerweise auch unsigned, weil ich irgendwie im Kontext "Bitmanipulieren" bin und dort die Eingaben besser unsigned sind. Mit den Rückgabewerten will ich ja wieder was machen, gewöhnlich shiften, maskieren, zählen, naja, irgendwelchen bitweisen Krimskrams machen. Will da nicht darüber nachdenken müssen, ob es mit Typen Probleme gewben könnte, sondern bleibe im gesamten Spiel auf unsigned. Mit Nachdenken käme man drauf, daß hier char reichen würde und signed sogar auch ginge. Aber Nachdenken ist was, was ich gar nicht mag. Also nicht über so Pillepalle. Das lenkt nur vom Programmierproblem ab.


Anmelden zum Antworten