& ist
and und | ist
or in Delphi. Ansonsten sieht das identisch aus

:
Delphi-Quelltext
1: 2: 3: 4: 5:
| flags := (priority and 7) * 2; if priority < 0 then flags := flags or 8; if sticky then flags := flags or 1; |
Um ein einzelnes Bit zu setzen kannst du folgendes machen:
Delphi-Quelltext
1: 2: 3:
| intvalue := 0; bitnumber := 3; intvalue := intvalue or (1 shl bitnumber); |
Dabei ist bitnumber nullbasiert. Im Beispiel kommt also binär 1000 heraus, denn shl verschiebt alle Bits (es ist ja nur das erste gesetzt bei der 1) um die angegebene Anzahl Bits nach links und durch das and wird das Bit im Ergebnis gesetzt.
Zum Testen ob ein Bit gesetzt ist:
Delphi-Quelltext
1: 2: 3: 4:
| intvalue := 8; bitnumber := 3; if intvalue and (1 shl bitnumber) > 0 then ShowMessage('Ist gesetzt'); |
Ich nehme mal an die Bitoperationen and und or an sich sind dir klar, aber da du meintest, du hast von Bit-Arithmetik gar keine Ahnung: Mit
and werden im Ergebnis alle Bits gesetzt, die in einem der Operanden gesetzt sind und mit
or alle, die in einem der Operanden gesetzt sind:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| 1010 and 1001 = 1000 // EDIT: Ja, da habe ich mich verschrieben... jetzt ist es richtig
1010 or 1001 = 1011 |
Und das ganze nochmal verpackt in Funktionen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| function SetBit(uNumber, uBit: Integer): Integer; begin Result := uNumber or (1 shl uBit); end;
function IsBitSet(uNumber, uBit: Integer): Boolean; begin Result := uNumber and (1 shl uBit) > 0; end; |