一部の 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 で正しい値を返します。
ta の他の負の値については、整数への単純な型キャストが正しい結果を与えるようです:
integer(t shr 25)
私は二項演算と表現に関して限界に達しているので、C# や Windows 電卓のように Delphi で同じ結果を得る方法を教えていただければ幸いです。