因此,在使用我的方法在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;