Zitat von
3_of_8:
Funktioniert aber so nicht bei negativen Zahlen - da müsste man ein i>0 reintun.
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
Delphi-Quellcode:
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;
ohne Bereichsprüfung
Delphi-Quellcode:
Function IsPowerOfTwo(i: Integer): Boolean;
Begin
Result := (i > 0) and (i and Pred(i) = 0)
or (i < 0) and (-i and Pred(-i) = 0);
End;
[edit]
Überlaufprüfung beachtet
oder man schaltet die Prüfung in der Funktion geziehlt um