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)中运行此程序
结果是:
而在PHP中,类似的结果如下:
输出为:
我也尝试过此功能,该功能已发布在stackOverflow上
运行代码
我该如何解决这个问题。谢谢。
或按位或更简单,更正确:
有关更多信息,您可以看一下这个问题: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