weil dieser zitierte Wert negativ wird und das Minuszeichen nicht beseitigt werden kann, und zwar auch nicht mit dem Datentyp UInt64 (in Delphi 7)
Da hast du denke ich nicht im Debugger nachgeschaut. Wenn du einen UInt64 Wert an IntToStr fütterst, bekommst du in der Tat negative Werte, da der Wert in Int64 konvertiert wird. Wenn du aber UIntToStr benutzt, funktioniert es. Und im Debugger sehen die Werte auch richtig aus...
Was hältst Du von dieser Idee?
Warum nicht wie in der Vorlage?
Delphi-Quellcode:
function CLZ(var x: UInt64): Integer;
begin
if x = 0 then
Result := 64
else
begin
Result := 0;
if x <= $00000000FFFFFFFF then
begin
Result := Result + 32;
x := x shl 32;
end;
if x <= $0000FFFFFFFFFFFF then
begin
Result := Result + 16;
x := x shl 16;
end;
if x <= $00FFFFFFFFFFFFFF then
begin
Result := Result + 8;
x := x shl 8;
end;
if x <= $0FFFFFFFFFFFFFFF then
begin
Result := Result + 4;
x := x shl 4;
end;
if x <= $3FFFFFFFFFFFFFFF then
begin
Result := Result + 2;
x := x shl 2;
end;
if x <= $7FFFFFFFFFFFFFFF then
begin
Result := Result + 1;
end;
end;
end;