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.