PHP 等效的 javascript >>> 使用零填充按位运算符右移?

标签 php bit-manipulation bit-shift zerofill

我可以知道如何使用 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; 
}

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

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

最佳答案

/**
 * The >>> javascript operator in php x86_64
 * Usage: -1149025787 >>> 0 ---> rrr(-1149025787, 0) === 3145941509
 * @param int $v
 * @param int $n
 * @return int
 */
function rrr($v, $n)
{
    return ($v & 0xFFFFFFFF) >> ($n & 0x1F);
}

/**
 * The >> javascript operator in php x86_64
 * @param int $v
 * @param int $n
 * @return int
 */
function rr($v, $n)
{
    return ($v & 0x80000000 ? $v | 0xFFFFFFFF00000000 : $v & 0xFFFFFFFF) >> ($n & 0x1F);
}


/**
 * The << javascript operator in php x86_64
 * @param int $v
 * @param int $n
 * @return int
 */
function ll($v, $n)
{
    return ($t = ($v & 0xFFFFFFFF) << ($n & 0x1F)) & 0x80000000 ? $t | 0xFFFFFFFF00000000 : $t & 0xFFFFFFFF;
}

好好享受吧。

关于PHP 等效的 javascript >>> 使用零填充按位运算符右移?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2642026/

相关文章:

ios - 从 BLE 数据包中解压字节数组

c# - 左移 255(作为一个字节)

php - 递归类别下的项目计数

java - java 中的 PHP 相似文本()

php - 对 mysql 查询的结果进行排序

c - C中~0的值是多少?

c - 如何从二进制数中删除尾随零

c - 请为我解释这个二进制搜索功能

flutter - 在 Dart 中使用三类 (>>>) 运算符

php - mysql配置: access denied error (1045)