Ich gehe mal davon aus das es sich um C handelt.
Eventuell so?
data_b ^= maske & data_a;
Edit:
Ach nee, dann nimmt er die Nullen nicht mit
Hallo Leute!
Will zwei BMPs als Layer übereinanderlegen. das obere hat ne Transparenzmaske.
Irgendwie verknotet sich mein Hirn bei dem Versuch diese Aufgabe zu lösen:
data_a soll data_b überschreiben, aber nur da, wo in maske eine 1 steht!
uint8_t maske = 0b01111000;
uint8_t data_a = 0b01011000;
uint8_t data_b = 0b10101010;
data_b = ?="§$)(data_a)?§$=)"§(maske)=$)("§$
Ergebniss data_b: = 01011010
Ist sicher ganz einfach, aber ich komm einfach nicht drauf, weil meine Hirnsynapsen die Bitoperatoren noch nicht ganz gecheckt haben...
Ich gehe mal davon aus das es sich um C handelt.
Eventuell so?
data_b ^= maske & data_a;
Edit:
Ach nee, dann nimmt er die Nullen nicht mit
vielleicht so:
data_b = (data_b & (~maske)) | (data_a & maske)
bei data_b werden alle Bits, bei denen die Maske auf 1 ist, gelöscht, bei data_a genau andersherum. Ich habe jetzt allerdings nicht überprüft, ob es wirklich funktioniert.
Viele Grüße,
Jan
@Jan
So passt das erste Bit nicht.
Wieso sollte gerade das erste Bit nicht passen?
Meine Variante liefert zu den Werten
uint8_t maske = 0b01111000;
uint8_t data_a = 0b01011000;
uint8_t data_b = 0b10101010;
das Ergebnis 0b11011010.
Das stimmt zwar nicht mit dem von Tyrald genannten (0b01011010) überein, aber das Bit an erster Stelle ist in der Maske 0, b wird an dieser Stelle also nicht von a überschrieben, bleibt also 1.
also aufm taschenrechner funzt das! :-D kanns aber erst später testen: grad nicht zu hause!
ich hab mich vertippt bei meinem ersten bit!
Also vielen Dank!
kennt noch jemand nen tollen link mit ner sammlung Bitoperator tricks??
Ein paar findet man ja in Büchern... Manchmal sieht man was geschicktes in anderem Source-Code...
also sowas:
multiplikation/division mit >> und <<
oder:
niederwertigstes bit löschen... mit data & (data+1)
usw.
Ich meinte das es nciht zu dem von Tyrald gewünschten Ergebniss führt. Aber wie ich das sehe ist das Ergebnis aus dem ersten Post falsch und dein Ergebnis richtig.Wieso sollte gerade das erste Bit nicht passen?
Lesezeichen