procedure TForm1.FormCreate(Sender: TObject);
var
temp,left,right:integer;
begin
right:=858993459;
left:=286331153; temp := ((858993459 shr -16) xor 286331153) and $0000ffff; //结果正确
temp := ((right shr -16) xor left) and $0000ffff; //错误了 Form1.Caption := inttostr(temp);end;
var
temp,left,right:integer;
begin
right:=858993459;
left:=286331153; temp := ((858993459 shr -16) xor 286331153) and $0000ffff; //结果正确
temp := ((right shr -16) xor left) and $0000ffff; //错误了 Form1.Caption := inttostr(temp);end;
第二个用integer进行shr -16超出范围,所以错误
奇怪的是我放鼠标到integer上面提示的范围难道是delphi允许最大的数(real,double......)??比他大的数好像没法用了??dword好像大点。可不能为负。
http://www.gzyd.net/lael/des.rar 解压
我简单测试了下,全部版本的结果都是相同的。