相关疑难解决方法(0)

PHP无符号右移 - 故障

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

php bit-shift negative-number

5
推荐指数
1
解决办法
2074
查看次数

PHP 等效 javascript &gt;&gt;&gt; 用零填充按位运算符右移?

我可以知道我该怎么做 PHP >>> 吗?此类运算符在 PHP 中不可用,但在 Javascript 中可用。

我刚刚设法发现了一个函数,如下所示:

function zeroFill($a, $b) 
{ 
    $z = hexdec(80000000); 
        if ($z & $a) 
        { 
            $a = ($a>>1); 
            $a &= (~$z); 
            $a |= 0x40000000; 
            $a = ($a>>($b-1)); 
        } 
        else 
        { 
            $a = ($a>>$b); 
        } 
        return $a; 
}
Run Code Online (Sandbox Code Playgroud)

但不幸的是,它不能完美地工作。

例如:-1149025787 >>> 0 Javascript 返回 3145941509 PHP zeroFill() 返回 0

php bit-manipulation bit-shift zerofill

4
推荐指数
3
解决办法
5403
查看次数