我將一些C#代碼移植到Delphi(XE5)。 C#代碼有這樣的代碼:int64上的SHR不返回預期的結果
long t = ...
...
t = (t >> 25) + ...
我翻譯這
t: int64;
...
t := (t shr 25) + ...
現在我看到的是德爾福(有時)計算轉向負面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)
我在我的關於二進制運算和表示的限制,所以我很感激只是得到相同的任何幫助Delphi中的結果就像在C#和Windows計算器中一樣。
問題是在解釋這個評論:http://stackoverflow.com/questions/5348540/what-is-a-equivalent-of-delphi-shl-in-c#comment6042256_5348558 –
你的'-1 *(( - 值shr位)+1) '當'Value = -4'和'Bits = 1'時失敗。它返回'-3'而不是'-2'。 – JRL