Delphi 在进行 shl 运算需要特别注意的地方

前几天在调试 2048 AI 程序的时候发现 Delphi 在处理 shl 超过32位时有着疑似bug的问题。

搜索一下得到如下的解答:

http://stackoverflow.com/questions/8127693/how-can-i-get-a-result-larger-than-232-from-shl

解决方法就是在做 shl 的时候做一次强制类型转换。

例如: n = Int64(2) shl 33

写一个简单的程序验证之,

program Project6;

{$APPTYPE CONSOLE}

uses
  SysUtils;

begin
  writeln(Format('%X',[1 shl 32]));
  writeln(Format('%X',[Int64(1) shl 32]));
  readln;
end.

 

delphishl

我试验了 Delphi 7/Delphi 10/Delphi 2010都一样,但是据说 XE2 之后修正了这个潜在的问题。

发表评论

电子邮件地址不会被公开。 必填项已用*标注