为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 PHP 中实现 JS 风格的按位左移运算符?

如何在 PHP 中实现 JS 风格的按位左移运算符?

PHP
守候你守候我 2021-11-26 17:53:15
我正在尝试将 PHP 中的值按位移位,与 JavaScript 中的结果相比。我已经尝试过 stackoverflow 中的解决方案,但目前我无法让它按照我想要的方式工作。我目前正在运行 PHP 7.1。例如在运行这个的 Chrome WebTools Console 等 JS 环境中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我怎么能去解决这个问题。谢谢你。
查看完整描述

1 回答

?
慕田峪7331174

TA贡献1828条经验 获得超13个赞

如果您想将按位移位的返回值限制为 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;

}


查看完整回答
反对 回复 2021-11-26
  • 1 回答
  • 0 关注
  • 174 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信