2: das > war 'nen Copy&Paster-Fehlerchen
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.
Delphi-Quellcode:
// 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) and (-i and Pred(-i) = 0);
// mit Rangeproblem
Result := (i > 0) and (i and Pred(i) = 0)
or (i < 0) and (-i and Pred(-i) = 0);
// mit Rangeproblem - verkürzt
Result := (i <> 0) and (i and Pred(Abs(i)) = 0);