2つの同一の関数(1つはPHP、もう1つはjavascript)が異なる結果を返すという奇妙な結果が得られています。
これらのコード行の両方の入力は同じです。
a = 4653896912;
b = 13;
変数の種類を再確認しましたが、どちらの変数もJSでは数値でPHPでは整数です。
PHPのコード行は次のとおりです。
$a = $a >> $b;
Javascriptの場合は次のとおりです。
a = a >> b;
両方の後で同じ値になると予想されますが、次のようになります。
PHP: $a = 568102
JS: a = 43814
これは、この時点で私を完全に困惑させました。
これは間違いなく、64ビット整数を使用するPHPと32ビットのみを使用するJSの問題であることがわかりました。私が今直面している問題は、これらの計算に32ビット整数を使用するようにPHPを取得する必要があることです。他の誰かが書いた、動作するはずの関数を見つけましたが、出力はまったく変更されていないようです。
private static function toInt32(&$x) {
$z = hexdec(80000000);
$y = (int) $x;
if($y ==- $z && $x <- $z){
$y = (int) ((-1) * $x);
$y = (-1) * $y;
}
$x = $y;
}