如何在 PHP 中实现 JS 风格的按位左移运算符?
How can I implement a JS-style bitwise left shift operator in PHP?
我正在尝试将 PHP 中的值与 JavaScript 中的结果进行比较。我已经尝试了 Whosebug 中的解决方案,但我目前无法让它按照我希望的方式工作。我现在 运行ning PHP 7.1.
例如在 JS 环境中,例如 Chrome WebTools 控制台 运行 宁此
var testValue = 94427771;
(testValue << 5)
结果:
-1273278624
而在 PHP 中,类似的结果如下:
$testValue = 94427771;
$testValue = ($testValue << 5);
echo $testValue;
输出为:96694037504
我也尝试过发布在 Whosebug 上的这个函数
function shift_left_32( $a, $b ) {
return ( $c = $a << $b ) && $c >= 4294967296 ? $c - 4294967296 : $c;
}
当你 运行 代码 shift_left_32($testValue, 5);
它 returns 值: 3021688672
请问我该如何解决这个问题。谢谢。
如果您想将移位的 return 值限制为 32 位有符号整数,那么您可以做的是将该数字取模为最大 32 位有符号整数,然后溢出它。
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
我正在尝试将 PHP 中的值与 JavaScript 中的结果进行比较。我已经尝试了 Whosebug 中的解决方案,但我目前无法让它按照我希望的方式工作。我现在 运行ning PHP 7.1.
例如在 JS 环境中,例如 Chrome WebTools 控制台 运行 宁此
var testValue = 94427771;
(testValue << 5)
结果:
-1273278624
而在 PHP 中,类似的结果如下:
$testValue = 94427771;
$testValue = ($testValue << 5);
echo $testValue;
输出为:96694037504
我也尝试过发布在 Whosebug 上的这个函数
function shift_left_32( $a, $b ) {
return ( $c = $a << $b ) && $c >= 4294967296 ? $c - 4294967296 : $c;
}
当你 运行 代码 shift_left_32($testValue, 5);
它 returns 值: 3021688672
请问我该如何解决这个问题。谢谢。
如果您想将移位的 return 值限制为 32 位有符号整数,那么您可以做的是将该数字取模为最大 32 位有符号整数,然后溢出它。
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