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;

解决方案 »

  1.   

    第一个语句用的是常数,系统自动按无符号甚至按64位整形处理,因此正确,
    第二个用integer进行shr -16超出范围,所以错误
      

  2.   

    int64可以了。 
    奇怪的是我放鼠标到integer上面提示的范围难道是delphi允许最大的数(real,double......)??比他大的数好像没法用了??dword好像大点。可不能为负。
      

  3.   

    Integer和 DWORD都是32位整数,实际范围是一样的,Integer可表示为+和-,DWORD只能+,所以DWORD表示的正数是Integer的2倍,Int64是64位整数,范围大了若干倍
      

  4.   

    delphiDES翻译全部完成了。需要的朋友可到下面地址下载:原版有js,php,prel版本,我加了一个delphi版(根据js,prel版综合来改的)的
    http://www.gzyd.net/lael/des.rar 解压
    我简单测试了下,全部版本的结果都是相同的。