Oder man macht das in Assembler
Sei EAX=@Data und EDX=count.
Delphi-Quellcode:
bt [eax],edx // setzt CF=1 wenn das Bit count = 1 ist
bts [eax],edx // setzt CF=1 wenn das Bit count = 1 ist und setzt dann das Bit=1
btr [eax],edx // setzt CF=1 wenn das Bit count = 1 ist und setzt dann das Bit=0
btc [eax],edx // setzt CF=1 wenn das Bit count = 1 ist und "dreht es dann um"
Das schöne an diesen Befehlen ist, daß edx (also count) im Bereich −2^31 bis 2^31 − 1 sein darf.
Entsprechende Funktionen könnte man so gestalten:
Delphi-Quellcode:
FUNCTION IsBitSet(p:pointer; count:integer):Boolean;
asm
bt [eax],edx
setc al
end;
FUNCTION SetBit(p:pointer; count:integer):Boolean;
asm
bts [eax],edx
setc al
end;
FUNCTION ClearBit(p:pointer; count:integer):Boolean;
asm
btr [eax],edx
setc al
end;
FUNCTION ToggleBit(p:pointer; count:integer):Boolean;
asm
btc [eax],edx
setc al
end;