前几天在调试 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.
我试验了 Delphi 7/Delphi 10/Delphi 2010都一样,但是据说 XE2 之后修正了这个潜在的问题。