Mit*_*l M 5 php bit-shift negative-number
因此,当使用我的方法在PHP中预先形成(>>>)无符号右移时,当数字涉及否定时,结果是不正确的.
PHP应用结果:
INPUT: 10 >>> 3
INPUT: -10 >>> 3
OUTPUT: 1
OUTPUT: 2684354558
Run Code Online (Sandbox Code Playgroud)
JAVA申请结果:
INPUT: 10 >>> 3
INPUT: -10 >>> 3
OUTPUT: 1
OUTPUT: 536870910
Run Code Online (Sandbox Code Playgroud)
(最佳结果是正确的并由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;
Run Code Online (Sandbox Code Playgroud)
这个uRShift更短,适用于32位和64位PHP,并且与32位PHP上的Java版本具有相同的结果,它与Java具有相同的大小.
function uRShift($a, $b)
{
if($b == 0) return $a;
return ($a >> $b) & ~(1<<(8*PHP_INT_SIZE-1)>>($b-1));
}
> uRShift(-10,3)
536870910
> uRShift(10,3)
1
Run Code Online (Sandbox Code Playgroud)