Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#15

Re: Unterschiedliches Verhalten bei Bitverschiebung (C# / De

  Alt 21. Jun 2009, 16:25
ich muß zugeben, wir beide rechnen irgendwie wohl nicht so ganz richtig

Delphi-Quellcode:
Function ArithmeticShiftRight(i: Integer; Shift: Byte): Integer;
  ASM
    MOV CL, DL
    SAR EAX, CL
  End;

Function ArithmeticShiftRight2(i: Integer; Shift: Byte): Integer;
  Begin
    Result := (i shr Shift) or (($FFFFFFFF * (i shr 31)) shl 32 - Shift)
  End;

function arithmetic_shr(a: Integer; b: Byte): Integer;
begin
  Result := Sign(a) * (abs(a) shr b);
end;

procedure TForm1.FormCreate(Sender: TObject);
var i: Integer;
begin
  for i := -1024 to 1024 do
    Memo1.Lines.Add(Format('%d: %d %d %d', [i,
      ArithmeticShiftRight (i, 11),
      ArithmeticShiftRight2(i, 11),
      arithmetic_shr (i, 11)
    ]));
end;
zumindestens rechnen alle etwas anders (auch mal mit "i sar 8" probiert und da sieht es noch schlimmer aus)

[add]
wegen der Operandengröße ... siehe 1. Funktion
$2B or not $2B
  Mit Zitat antworten Zitat