[gelöst]BitShifting unklare Ausgabe Nr.2



  • Hi Leute,
    Ich habe folgenden Code gebastelt der den
    Index der 1 bestimmen soll...
    Also z.B. 0010000 hätte den Index 4,
    doch ich bekomme ein völlig unverständliches
    Ergebnis...

    #include <stdio.h>
    
    int main () {
        char x=8; // 1000 (binär)
        int i;
    
        while (x != 1) // 1. Shifting 1000 -> 0100
        {              // 2. Shifting 0100 -> 0010
            x >>= 1;   // 3. Shifting 0010 -> 0001
            i++;       // Index müsste also 3 ergeben...
        }
    
        printf("x hat den Index %i",i);
        return 0;
    }
    

    Wo liegt diesmal mein Denkfehler? 😞

    MfG Jonas 🙂



  • So:

    #include <stdio.h>
    
    int main () {
        char x=8; // 1000 (binär)
        int i = 0;
    
        while ( ( x&1 ) != 1) // 1. Shifting 1000 -> 0100
        {              // 2. Shifting 0100 -> 0010
            x >>= 1;   // 3. Shifting 0010 -> 0001
            i++;       // Index müsste also 3 ergeben...
        }
    
        printf("x hat den Index %i",i);
    }
    


  • Sorry für den Post
    aber ich habe mein Problem schon gefunden
    es lag daran, dass ich i nicht mit 0 initialisiert habe.

    @David_pb:

    Wird in deiner Version immer überprüft ob
    das erste gesetzte Bit ungleich 1 ist, versteh
    ich das richtig?
    Gut so kann man es auch mache denke ich.

    MfG Jonas 🙂
    Und dankeschön!



  • Bei mir wird geprüft ob das LSB gesetzt ist. Wenn du den Index des höchsten gesetzten Bits haben willst, dann Funktioniert dein Code. 🙂
    Für das Problem kannst du übrigens auch einen Trick verwenden den die IEEE 754 Repräsentation von Flieskommazahlen zulässt (ist aber nicht Portabel):

    char x=8; // 1000 (binär)
    float tmp = ( float )( x & -x );
    int i = ( *( unsigned int* )&tmp >> 23 ) - 0x7f;
    

Anmelden zum Antworten