undso: Bit setzen geht nicht

Beitrag lesen

Hi,
erstmal Dank an alle und auch an plan_b und ritschmanhard fürdie Tipps.

Willst du also bit 5 (dezimalwert 16) setzen, so ver-oder-st du deinen Wert mit 16:
update Tabelle set spalte = spalte | 16

Ja genau, so geht es auch. Hier könnte ich aber nicht mehrere Bits auf einmal setzen. Oder, stop. Doch. Bsp. Bit 5 und 1:

update Tabelle set spalte = spalte | 17

Es gibt es einen alten Programmierertrick (mal angenommen du weisst nicht wieviele Bits spalte hat):

  1. stelle sicher, dass Bit 5 gesetzt ist:
    update Tabelle set spalte = spalte | 16
  2. verwende nun xor mit dem fraglichen Bit:
    update Tabelle set spalte = spalte ^ 16

Genau. Das geht auch.
Durch den Link von plan_b habe ich noch folgendes versucht:

Das 5'te Bit setzen mit:

update Tabelle set spalte=spalte|(b'10000');

Und das 5'te Bit löschen mit:
update Tabelle set spalte=spalte&(b'01111');

Bei spalte=spalte|(b'10000'); bräuchte ich auch nicht beachten, wieviele Bits die Spalte hat, da ja nach Links alles mit 0 aufgefüllt wird.
Bei spalte=spalte&(b'01111'); wird eher problematisch, aber meinem Vorhaben eher egal, da ich genau weiß, wieviele Bits die Spalte hat.

Grüße