Einzelnen Beitrag anzeigen

Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Gestern liefs noch, heut Compilererror

  Alt 27. Mär 2006, 09:59
Wieso das Ergebnis 848 ist:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  a: Integer;
begin
     a := 53 shl 4;
     ShowMessage(IntToStr(a));
end;
Weil es Delphi sagt. Mach aus Byte mal Integer und guck es dir an. Du verschiebst alle Bytes um 4 Stellen nach links:
Code:
0000 0001 shl 4 = 0000 1000 => 1 -> 8
Und jetzt mach das mal mit 53.

Schalt mal die Bereichsprüfung aus, dann kommt es zu einem Überlauf, der eventeull gewollt sein könnte. Hab eich bei Source von Hagen auch schon mal gesehen:

Delphi-Quellcode:
procedure RC4Init(var RC4: TRC4Context; const Key: String);
var
  R,S,T,K: Byte;
  U,L: Integer;
begin
{$R-}
{$Q-}
  L := Length(Key);
  with RC4 do
  begin
    I := 0;
    J := 0;
    for S := 0 to 255 do D[S] := S;
    R := 0;
    U := 0;
    for S := 0 to 255 do
    begin
      if U < L then K := PByteArray(Key)[U] else K := 0;
      Inc(U);
      if U >= L then U := 0;

      Inc(R, D[S] + K);
      T := D[S];
      D[S] := D[R];
      D[R] := T;
    end;
  end;
end;
Mit R- wird die Bereichsprüfung ausgeschaltet, um den gewollten Überlauf bei Inc() zu ermöglichen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat