undso: Bit setzen geht nicht

Beitrag lesen

Hi Richard,

Bei spalte=spalte&(b'01111'); wird eher problematisch, aber meinem Vorhaben eher egal, da ich genau weiß, wieviele Bits die Spalte hat.

Dir ist klar, dass diese Anweisung alle bits ausser 1,2,3,4 löscht?
Also 5 (wie beabsichtigt),6,7,... (wieviele auch immer drüber kommen)?

Das ist mir klar. Weil, ja nach links alles mit einer 0 gefüllt wird und somit alle Bits gelöscht werden.

Dann ist es OK...
Merke: nur mit 1 ver-und-ete Bits stehen nach der ver-und-ung noch auf ihrem ursprünglichen Wert.

Jepp. Zur Not mache ich es so, wie du es beschrieben hast, falls ich doch mal die Länge nicht kenne:

  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

Das kann man ja auch mit einer Query machen ne:

update Tabelle set spalte = spalte | 16, spalte = spalte ^ 16;

Oder

update Tabelle set spalte = (spalte | 16)  ^ 16;

Was ich mich auch spontan gefragt habe, ob ich eine Spalte selektieren kann, in der ein bestimmtes gesetzt ist.

select blabla from Tabelle where spalte=(spalte&16)=16
Ja gut, damit will ich euch nicht nerven und diesen Threas missbrauchen, ich suche mal in der mySQL Doku.

Grüße