【发布时间】:2014-02-21 17:21:05
【问题描述】:
我正在将一些 C# 代码移植到 Delphi (XE5)。 C# 代码有这样的代码:
long t = ...
...
t = (t >> 25) + ...
我把它翻译成
t: int64;
...
t := (t shr 25) + ...
现在我看到 Delphi(有时)为移动负 t 计算错误的值,例如:
-170358640930559629 shr 25
Windows Calculator: -5077083139
C# code: -5077083139
Delphi:
-170358640930559629 shr 25 = 544678730749 (wrong)
对于这个例子,-1*((-t shr 25)+1) 在 Delphi 中给出了正确的值。
对于 t 的其他负值,一个简单的整数类型转换似乎给出了正确的结果:
integer(t shr 25)
我在二进制运算和表示方面已处于极限,因此如果能在 Delphi 中获得与 C# 和 Windows 计算器中相同的结果,我将不胜感激。
【问题讨论】:
-
这个问题解释在这个评论里:stackoverflow.com/questions/5348540/…
-
当
Value = -4和Bits = 1时,您的-1*((-Value shr Bits)+1)会失败。它返回-3而不是-2。
标签: delphi delphi-xe5 int64