Forum: Neuen Beitrag zur Code-Library hinzufügen
Delphi
by himitsu,
7. Mai 2009
ach menno, so kann man sich auch verdenken :wall:
dann also > wieder rein und Abs raus :nerd:
Result := (i > 0) and (i and Pred(i) = 0);
Forum: Neuen Beitrag zur Code-Library hinzufügen
Delphi
by himitsu,
7. Mai 2009
2: das > war 'nen Copy&Paster-Fehlerchen :oops: und sollte ein <> sein
1: Abs(MinInt) = MaxInt+1 , also außerhalb des Wertebereichs, da der negative Bereich um 1 größer ist, also der Positive, weil die 0 im positiven Bit-Satz enthalten ist.
// ohne Rangeprobleme, da der Sonderfall von MinInt abgefangen wird
Result := (i = Low(Integer))
or (i > 0) and (i and Pred(i) = 0)
or (i < 0)...
Forum: Neuen Beitrag zur Code-Library hinzufügen
Delphi
by himitsu,
7. Mai 2009
ist klar, da durch die Dastellung oben alles 1 und unten alle Bits 0 sein müßten (siehe Aufbau des Zweierkomplements)
mit aktiver Bereichsprüfung
Function IsPowerOfTwo(i: Integer): Boolean;
Begin
Result := (i = Low(Integer))
or (i > 0) and (i and Pred(i) = 0)
or (i < 0) and (-i and Pred(-i) = 0);
End;
Forum: Neuen Beitrag zur Code-Library hinzufügen
Delphi
by himitsu,
7. Mai 2009
ist och hübsch und funktioniert ... entspricht auch Hagens 2. Version :angel:
Forum: Neuen Beitrag zur Code-Library hinzufügen
Delphi
by himitsu,
6. Mai 2009
Kommt drauf an ... solange der Compiler keine Inline-Funktionen unterstützt (abgesehn davon, daß Hagens Funktion eh nicht als Inline definiert ist), kann man den Call-Overhead eh nicht umgehn.
es ist auch mehr als Alternative zum ersten Code (mit dem Schleifchen) gedacht
das was die Schleife macht, übernimmt hier BSR bzw BSF
das Ganze ist 'ne angepaßte Auskopplung von