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)

-
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.