Sven Rautenberg: (MATHEMATIK) (DATENBANK) Zahl in 2-er Potenzen zerlegen

Beitrag lesen

Moin!

Deswegen die Frage: Gibt es eine einfache mathematische Rechnung mit deren Hilfe ich feststellen kann, ob eine bestimmte Potenz von 2 in der Zerlegung einer Zahl vorkommt? "Einfach" heißt hier: Ein Einzeiler, also kein Algorithmus, der auf eine Schleife zurückgreift. Dann könnte ich die Auswahl der richtigen Datensätze nämlich schon der Datenbank überlassen. Oder gibt es evtl. sogar einen Datenbankbefehl, der diese Zerlegung für mich übernimmt?

Wenn du binäre Operationen machen kannst, also sowas wie AND und OR, dann ist dir damit im Prinzip schon geholfen.

Weil: "flagwert AND 2" ergibt entweder 0, wenn Bit 1 nicht gesetzt ist, oder einen Wert größer Null, wenn das Bit gesetzt ist.

Entsprechend kannst du auch alle anderen Bits testen. Auch Kombinationen von Bits lassen sich testen, erfordern dann aber natürlich die differenziertere Berücksichtigung des Ergebnisses.

Auf die gleiche Weise lassen sich Bits löschen und setzen:
Setzen: flagwert = flagwert OR 2 setzt Bit 1
Löschen: flagwert = flagwert AND NOT 2 löscht Bit 1

Wichtig ist bei den Operationen, dass es sich hier nicht um logische Verknüpfungen handelt, sondern um bitweise Verknüpfungen von Integer-Werten.

Um die Einzelabfrage, welche Aktion bei welchem gesetzten oder gelöschten Bit notwendig ist, kommst du kaum herum. Und wenn deine Datenbank binäre Operationen anbietet, kannst du die Abfrage der gesetzten (oder gelöschten) Bits schon direkt in die SQL-Abfrage packen.

- Sven Rautenberg

--
"Bei einer Geschichte gibt es immer vier Seiten: Deine Seite, ihre Seite, die Wahrheit und das, was wirklich passiert ist." (Rousseau)