Thx. TBitIndex hatte ich von 1 bis 64 definiert um mit Int64 noch arbeiten zu können wobei mir dann aufgefallen ist das es schwachsinn ist da meine funktion ja nur mit Integern arbeitet.
Wenn ich mir von Hagen
Delphi-Quellcode:
function BitSet(Value: Cardinal; State: Boolean; Index: Cardinal): Cardinal;
begin
if State then Result := Value or (1 shl Index)
else Result := Value and not (1 shl Index);
end;
anschaue ist das ja so ziemlich das gleiche wie in meinem Post nur das bei diesem Beispiel bei Bit 0 angefangen wird und bei mir war
Delphi-Quellcode:
type
TBitIndex = 1..8; //bzw. dann 1..64
Naja, ok, dann fang ich bei Index 0 an um die eine Rechenoperation zu sparen. Wäre es nicht effektiver wenn man "Index" vom Type Byte defniert da er dann nicht mit überträgen etc. rumrechnen muss und nen Byte geht ja eher in ein Register als ein Cardinal oder nicht? Und 255 Bitshiftpositionen dürften ja auch reichen
welche der folgenden 3 Varianten wäre eigentlich die effektivste im Zusamenhang mit der Funktion (eventuell mit Begründung)
Delphi-Quellcode:
TBitIndex = Byte; //Variante1
TBitIndex = 0..7; //Variante2
TBitIndex = Cardinal; //Variante3