2012-10-23 61 views
2

功能:在PHP 功能:相同的功能,PHP在javascript給予不同的輸出

function int64add(dst, x, y) 
{ 
    var w0 = (x.l & 0xffff) + (y.l & 0xffff); 
    var w1 = (x.l >>> 16) + (y.l >>> 16) + (w0 >>> 16); 
    var w2 = (x.h & 0xffff) + (y.h & 0xffff) + (w1 >>> 16); 
    var w3 = (x.h >>> 16) + (y.l >>> 16) + (w2 >>> 16); 
    dst.l = (w0 & 0xffff) | (w1 << 16); 
    dst.h = (w2 & 0xffff) | (w3 << 16); 
} 

我轉換這javascript傳送給PHP作爲

function int64add($dst, $x, $y) 
{ 
    $w0 = ($x->l & 0xffff) + ($y->l & 0xffff); 
    $w1 = ($x->l >> 16) + ($y->l >> 16) + ($w0 >> 16); 
    $w2 = ($x->h & 0xffff) + ($y->h & 0xffff) + ($w1 >> 16); 
    $w3 = ($x->h >> 16) + ($y->l >> 16) + ($w2 >> 16); 
    $dst->l = ($w0 & 0xffff) | ($w1 << 16); 
    $dst->h = ($w2 & 0xffff) | ($w3 << 16); 
} 

這兩個函數返回不同的輸出相同的輸入。試圖尋找過互聯網,但無法找到任何東西。請幫忙!

在JS:

輸入:

DST:

int64{ 
    h=1779033703, 
    l=-205731576 
} 

X:

int64{ 
    h=1779033703, 
    l=-205731576 
} 

Y:

int64{ 
    h=1779033703, 
    l=-205731576 
} 

回報:

int64{ 
    h=-736899889, 
    l=-411463152 
} 

在PHP中:

輸入:

DST:

int64{ 
    h=1779033703, 
    l=-205731576 
} 

X:

int64{ 
    h=1779033703, 
    l=-205731576 
} 

Y:

int64{ 
    h=1779033703, 
    l=-205731576 
} 

回報:

int64{ 
    h=-736899891, 
    l=-411463152 
} 

類的int64在PHP:

class int64{ 
    var $h; 
    var $l; 
    function int64($h,$l){ 
     $this->h=$h; 
     $this->l=$l; 
    } 
} 

功能的int64在JS:

function int64(h,l){ 
     this.h=h; 
     this.l=l; 
    } 

我想PHP給輸出的JavaScript。 (Javascript是正確的)

+5

請顯示輸出 –

+0

什麼類型是$ dst,$ x,$ y? (對象,數組,字符串..) – Svetoslav

+0

所有這些都是對象 –

回答

0

這是因爲你沒有在PHP中正確處理>>>運算符。您應該確保正確的換擋操作後清除使用& 0xffff高位:

$w0 = ($x->l & 0xffff) + ($y->l & 0xffff); 
$w1 = (($x->l >> 16) & 0xffff) + (($y->l >> 16) & 0xffff) + (($w0 >> 16) & 0xffff); 
$w2 = ($x->h & 0xffff) + ($y->h & 0xffff) + ($w1 >> 16); 
$w3 = (($x->h >> 16) & 0xffff) + (($y->l >> 16) & 0xffff) + (($w2 >> 16) & 0xffff); 

這樣做,給了相同的值,對我來說他們是從你的不同;也許你的輸入值並不都是相同的(複製粘貼錯誤?)

object(int64)#1 (2) { 
    ["h"]=> 
    int(1573309647) 
    ["l"]=> 
    int(-411463152) 
} 

正如其他人所說的,我會認真考慮使用GMP或BCMath。

+0

你可以檢查這個請http://stackoverflow.com/問題/ 13029288/JavaScript的和PHPS相似的功能,給-不同的輸出 –

相關問題