- 12V Akku mit 280 Ah bauen         
Ergebnis 1 bis 8 von 8

Thema: Bitoperatoren,

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    04.12.2006
    Beiträge
    32

    Bitoperatoren,

    Anzeige

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

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    25.04.2010
    Beiträge
    1.249
    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

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    08.03.2008
    Alter
    31
    Beiträge
    49
    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

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    25.04.2010
    Beiträge
    1.249
    @Jan
    So passt das erste Bit nicht.

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    08.03.2008
    Alter
    31
    Beiträge
    49
    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.

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    04.12.2006
    Beiträge
    32
    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!

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    04.12.2006
    Beiträge
    32
    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.

  8. #8
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    25.04.2010
    Beiträge
    1.249
    Wieso sollte gerade das erste Bit nicht passen?
    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.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

LiFePO4 Speicher Test