Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP7按负数进行位移位将在PHP中引发算术错误_Php_Bitwise Operators_Php 7 - Fatal编程技术网

PHP7按负数进行位移位将在PHP中引发算术错误

PHP7按负数进行位移位将在PHP中引发算术错误,php,bitwise-operators,php-7,Php,Bitwise Operators,Php 7,我们希望切换到PHP7服务器,并对网站的现有代码进行兼容性检查。发现的问题之一是以下函数和按位负数移位 显然,这将在PHP7中抛出错误。我承认我不完全理解这个算法是如何工作的,但我想知道是否有人对如何修改该函数提出了建议,以#1维护该功能并#2使其符合PHP7 /** * Right shift with zero fill. * * @param integer $a number to shift * @param integer $b number of bits to shift

我们希望切换到PHP7服务器,并对网站的现有代码进行兼容性检查。发现的问题之一是以下函数和按位负数移位

显然,这将在PHP7中抛出错误。我承认我不完全理解这个算法是如何工作的,但我想知道是否有人对如何修改该函数提出了建议,以#1维护该功能并#2使其符合PHP7

/**
 * Right shift with zero fill.
 *
 * @param integer $a number to shift
 * @param integer $b number of bits to shift
 * @return integer
 */
public function zeroFill($a, $b){
    return ($a >= 0) ? ($a >> $b) : ($a >> $b) & (PHP_INT_MAX >> ($b - 1));
}

当数学计算没有按正常预期进行时,就会抛出算术错误,在这种情况下,可能会导致数值超出整数的可能边界。()

您的函数已经在验证这一点并限制PHP_INT_MAX的操作,因此没有问题

要删除验证插件抛出的警报消息,需要使用try/catch块覆盖函数,以捕获可能的算术错误。这样,函数将类似于:

public function zeroFill($a, $b){
    try {
        return ($a >= 0) ? ($a >> $b) : ($a >> $b) & (PHP_INT_MAX >> ($b - 1));
    } catch(ArithmeticError $error) {
        // Do your logic to treat this kind of error
    }
    return $a; // Or return something you would want
}

此外,使用stru焊盘始终是一个不错的选择。

查找stru焊盘函数,也许您可以使用它来解决问题