int auf bits prüfen (register)?



  • Hi

    Entschuldigung für die eigentümliche Thread Formulierung aber ich wusste nicht wie ich es kurzfassen sollte.

    Ich habe eine Funktion die mir einen Register eines IC's ausliest und diesen Register (24bit MSB) als "unsigned long" zurück gibt.
    Beispiel für einen Register wo Bit 23 Null ist:
    101111111111111111111111
    würde mir die Funktion den Wert 12582911 zurückgeben.

    Wie kann ich nun nur aus dem Wert 12582911 ermitteln ob Bit 23 Null ist?
    Geht das irgendwie mit Bit-Math und right-shift?



  • Ich denke ich habs gefunden:

    unsigned long in = 0b101111111111111111111111;
            bool isSet = (in >> 22) & 1;
            cout << isSet << "\n";
    
    >>> 0
    


  • @pauledd sagte in int auf bits prüfen (register)?:

    wo Bit 23 Null ist:
    101111111111111111111111

    Man beginnt bei 0 zu Zählen an.
    Das ist Bit 22 bzw. das 23. (Dreiundzwanzigste) Bit.

    So kann man aus der Stelle leicht auf den Wert des Bit des Bit kommen: 2Stelle2^{Stelle}

    (Register & (1 << 22)) wird nur das Bit 22 maskiert.
    Das gibt 0 bzw. ungleich 0 (1 ist das nur beim Bit 0)

    if (!(register & (1 << 22))) puts("Bit ist 0");
    


  • warum arbeitest du nicht mit hexzahlen?

    bool isset = (in & 0x400000);
    


  • @Wade1234 sagte in int auf bits prüfen (register)?:

    warum arbeitest du nicht mit hexzahlen?

    bool isset = (in & 0x400000);
    

    Bei (1 << 22) sieht man sofort, dass Bit 22 gemeint ist.
    (der Compiler macht da schon eine Konstante draus.)

    Allerdings wird man dafür eher eine Alphanumerische Bezeichnung nehmen. Als enum oder per #define


Log in to reply