Richtig Shiften



  • Hi,

    nur mal eine generelle Frage, beides funktioniert, aber gibt es einen Grund eine von den 2 Methoden vorzuziehen, oder ist das egal ? Also erst logisch verknüpfen dann shiften, oder erst shiften und dann logisch verknüpfen, oder egal ?

    Methode 1

    int clRGB  = ColorToRGB( clMyColor );
     int red    =  colRGB & 0x000000FF;
     int green  = (colRGB & 0x0000FF00) >> 8;
     int blue   = (colRGB & 0x00FF0000) >> 16;
    

    Methode 2

    int clRGB  = ColorToRGB( clMyColor );
     int red    =  colRGB        & 0x000000FF;
     int green  = (colRGB >>  8) & 0x000000FF;
     int blue   = (colRGB >> 16) & 0x000000FF;
    


  • Ich finde die zweite besser, man hat hinten immer das Gleiche stehen (ich würde aber 0xFF statt 0x000000FF schreiben) 🙂


  • Mod

    Ich finde beim ersten sieht man besser, wie das funktioniert, weil man da die Bitmasken klar als solche erkennen kann.



  • Ja, die 2. Methode gefällt mir auch besser, da könnte man statt 0xFF auch eine Variable einsetzen. Bei Methode 1 war ich mir nicht sicher ob evtl. doch beim Shiften von links noch 1-zen eingefügt werden können.

    Ist das beim Verknüpfen mit 0xFF sicher dass alle bits links von FF auf 0 sind ? Deshalb habe ich die linken 3 Bytes explizit auf 0 gesetzt.



  • also ich find die erste variante hübscher ^^

    zum zweiten: da würd ich (auch) nur 0xFF schreiben

    Ist das beim Verknüpfen mit 0xFF sicher dass alle bits links von FF auf 0 sind ? Deshalb habe ich die linken 3 Bytes explizit auf 0 gesetzt.

    klar...
    wenn du 8 eingibst, kann doch au net sein, dass da davor noch bits gesetzt sind und dann auf einmal 24 oder so rauskommt... 😛

    bb



  • unskilled schrieb:

    klar...
    wenn du 8 eingibst, kann doch au net sein, dass da davor noch bits gesetzt sind und dann auf einmal 24 oder so rauskommt... 😛

    bb

    Ja, bei einer Zuweisung ist mir das klar, aber beim logischen Verknüpfen könnte der Compiler ja in diesem Beispiel auch einen char statt einen int nehmen ? Da war ich mir nicht sicher ob dann mit 8-Bit die restlichen 24 auf 0 gesetzt werden.


Anmelden zum Antworten