我有C代碼,我想將它轉換爲Delphi。我所做的是對還是錯?將XORShift算法從C代碼轉換爲Delphi代碼
uint64_t s[ 16 ];
int p;
uint64_t next(void) {
uint64_t s0 = s[ p ];
uint64_t s1 = s[ p = (p + 1) & 15 ];
s1 ^= s1 << 31; // a
s1 ^= s1 >> 11; // b
s0 ^= s0 >> 30; // c
return (s[ p ] = s0^s1) * 1181783497276652981LL;
Delphi代碼:
Function next() : UInt64;
var
s : array of UInt64;
s0, s1 : UInt64;
p : integer;
begin
SetLength(s, 16);
s0 := s[p];
p := (p + 1) and 15;
s1 := s[p];
s1 := s1 xor (s1 shl 31);
s1 := s1 xor (s1 shr 11);
s0 := s0 xor (s0 shr 30);
s[p] := (s0 xor s1) * 1181783497276652981;
result := s[p];
end;
讓我們從一個簡單的問題開始:它是否編譯?一個更復雜的問題:如果它編譯,它會給你預期的結果嗎? –
「p」定義爲局部變量,並且將是未定義的。如果您嘗試編譯它,編譯器將顯示警告。你從來沒有試圖編譯它?嘗試在兩個實現上運行一些測試。 –