This question already has answers here:
Convert from 64bit number to 32bit number
                                
                                    (3个答案)
                                
                        
                                在4个月前关闭。
            
                    
我正在尝试将PHP中的值与JavaScript中的结果进行按位移位。我已经尝试过stackoverflow中的解决方案,但目前还无法按照我的意愿使其正常工作。我当前正在运行PHP 7.1。

例如在JS环境(例如Chrome WebTools Console)中运行此程序

var testValue = 94427771;(testValue << 5)

结果是:
-1273278624

而在PHP中,类似的结果如下:

$testValue = 94427771;$testValue = ($testValue << 5);echo $testValue;

输出为:96694037504

我也尝试过此功能,该功能已发布在stackOverflow上

function shift_left_32( $a, $b ) { return ( $c = $a << $b ) && $c >= 4294967296 ? $c - 4294967296 : $c;}

运行代码shift_left_32($testValue, 5);的位置它返回值:3021688672

我该如何解决这个问题。谢谢。

最佳答案

如果您想将按位移位的返回值限制为一个32位带符号整数,则可以对最大32位带符号int取模,然后对其进行溢出。

function shift_left_32( $a, $b ) {
    return ( $c = $a << $b ) && $c > 0x7FFFFFFF ? ($c % 0x80000000)-0x80000000 : $c;
}


或按位或更简单,更正确:

function shift_left_32( $a, $b ):int {
    return ( $a << $b ) | -0x80000000;
}


有关更多信息,您可以看一下这个问题:Convert from 64bit number to 32bit number

08-15 21:55