PHPで符号なしの右シフトをプリフォームするために私のメソッドを使用すると、その数値に負の値が含まれていると結果が正しくありません。PHPの符号なし右シフト - 誤動作
PHPアプリケーション結果:
INPUT: 10 >>> 3
INPUT: -10 >>> 3
OUTPUT: 1
OUTPUT: 2684354558
Javaアプリケーション結果:
INPUT: 10 >>> 3
INPUT: -10 >>> 3
OUTPUT: 1
OUTPUT: 536870910
(トップ結果が正しいとJavaによって生成され、次いで、底の結果が正しくないとPHPによって生成される)
PHPで数字が負の場合にのみ失敗します。
これらのアプリケーションで使用されているシフトは次のとおりです。
できれば助けてください! PHPに移行するための
方法:
function urshift($x, $n){
$mask = 0x40000000;
if ($x < 0){
$x &= 0x7FFFFFFF;
$mask = $mask >> ($n-1);
$ret = ($x >> $n) | $mask;
$ret = str_pad(decbin($ret), 32, '0', STR_PAD_LEFT);
$ret[0] = '1';
$ret = bindec($ret);
} else {
$ret = (int)$x >> (int)$n;
}
return $ret;
あなたの結果がコードにどのように対応しているかは不明です。入力と出力の使い方を明確に示す[最小限のテストケース](http://sscce.org)を作成できますか? –
私はそれが入力と出力が何であるかはっきりしているので修正しました。 –