无符号右移函数不适用于负输入

2023-12-12

我正在寻找一种使用方法>>>64 位版本 PHP 5.5.14 中 JavaScript 的函数。我发现这个功能在我的谷歌搜索中:

function uRShift($a, $b) 
{ 
    $z = hexdec(80000000); 
    if ($z & $a) 
    { 
        $a = ($a >> 1); 
        $a &= (~$z); 
        $a |= 0x40000000; 
        $a = ($a >> ($b - 1)); 
    } else { 
        $a = ($a >> $b); 
    } 
    return $a; 
}

这个函数似乎对于正数工作得很好,但是当传递负数时我得到不同的结果。

例如:

PHP:

In: echo uRShift(-672461345, 25);
Out: -149

JavaScript(Chrome 35):

In: -672461345 >>> 25
Out: 107

EDIT:

我还尝试了上面链接的答案中提到的其他功能。

function uRShift($a, $b)
{
    if($b == 0) return $a;
    return ($a >> $b) & ~(1<<(8*PHP_INT_SIZE-1)>>($b-1));
}

PHP:

In: echo uRShift(-672461345, 25);
Out: 549755813867

Runnable


常数0x80000000(它被写为调用hexdec并存储在$z本例中的变量)表示最低符号的二进制补码负整数(100000....二进制)。表达方式~$z应该给出按位非,即最高有符号正整数(最终是2147483647).

原数(positive 0x80000000, 那是,2147483648) 不能存储为signed32 位整数,所以通常它会存储为某种类型的浮点数。不幸的是,PHP 5.5 认为~(2147483648)等于-2147483649, which 如果我们正在处理例如,那么这是正确的64 位整数.

确实,回响PHP_INT_SIZEin runnable表示整数是8字节,也就是64位。因此,该算术在 PHP 5.5 中无法正常运行。

要解决此问题,只需更换~$z具有静态常量,如下:

function uRShift($a, $b) 
{ 
    if ($a < 0) 
    { 
        $a = ($a >> 1); 
        $a &= 2147483647; 
        $a |= 0x40000000; 
        $a = ($a >> ($b - 1)); 
    } else { 
        $a = ($a >> $b); 
    } 
    return $a; 
}

这个功能还存在一些不足;例如,移位 0 无法正常工作。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无符号右移函数不适用于负输入 的相关文章

  • 在选择下拉列表中选择特定选项时添加输入框

    我需要在选择选项时将输入添加到选择选项中 每当用户选择 其他 时 就会出现一个输入框供用户输入数据 HTML
  • 在浏览器中就绪的 DOM 上缺少语言翻译弹出窗口:Laravel 5.2

    我的控制器中有以下代码 public function AllCountries Countries new App DataAccess CountryData gt GetAllCountries app gt setLocale fr
  • 添加数组的总和。显示1个输出

    更新 这个问题的答案如下 感谢在不同线程上进行的 dougtesting 将数组相加 显示总和 https stackoverflow com questions 45724641 add array together display su
  • 获取 Firebase AngularFire 中项目的索引 ID

    这里提出了类似的问题 但接受的答案并没有真正回答这个问题 使用 AngularFire 是否可以创建关系型数据库 或者访问 UniqueID https stackoverflow com questions 16879484 using
  • PHP 中的并行处理 - 你是如何做到的?

    我目前正在尝试在 php 中实现一个作业队列 然后 队列将作为批处理作业进行处理 并且应该能够并行处理一些作业 我已经做了一些研究并找到了几种实现它的方法 但我并不太了解它们的优点和缺点 例如 通过多次调用脚本来进行并行处理fsockope
  • 无法在Phalcon php中调用除indexAction之外的indexController的操作

    我的 xampp htdocs 目录中有一个名为 phalcon 的简单项目 并且我将 apache 配置为指向该文件夹 以便我可以在浏览器中转到 phalcon 当我尝试打开索引 默认 以外的索引控制器视图时 会出现问题 例如 我在索引控
  • PHP 中的 __DIR__ 和 dirname(__FILE__) 有什么区别吗?

    对我来说看起来是一样的 但我不确定 因为有很多项目使用dirname FILE 他们的结果是完全一样的 所以 这没有什么区别 例如 以下两行 var dump dirname FILE var dump DIR 两者都会给出相同的输出 st
  • d3 序数尺度的映射

    我正在使用 D3 的序数比例将数字映射到颜色 我用过这个 color d3 scale ordinal range 1f77b4 ff7f0e 2ca02c d62728 9467bd 8c564b e377c2 domain 0 6 co
  • Doctrine QueryBuilder 重用部件

    我想计算所有符合我的条件的字段 并使用学说查询生成器逐页获取它们 我生成的查询取决于我的过滤器字段 第一部分是计算记录 以便我可以计算页数 qb em gt createQueryBuilder qb gt select COUNT m i
  • 需要将焦点放在react中的div上

    我有一个之前用 H1 标签包裹的文本 页面加载后 我需要专注于该文本 为了方便起见 我将它包装在 div 中 render const translate billing primaryContactSelection true this
  • POST 之后在 PHP 中设置 Location 标头时避免 HTTP 302 响应代码

    我需要放一个201 CreatedPOST 请求的响应代码和 Location 标头 但由于某种原因我仍然收到 302 响应 这就是我所拥有的 header HTTP 1 1 201 header Location The new reso
  • LINQ SingleOrDefault() 等效项

    在 Typescript 中 我经常使用这种模式 class Vegetable constructor public id number public name string var vegetable array new Array
  • 输入号码时自动格式化 SSN

    我有一个文本字段 用户输入 SSN 号码 输入自身时 它应该格式化 就像关于文本字段的更改 它应该格式化999 999 999以这种方式在显示器本身上 kottenator 的脚本几乎已经完成 但它每隔 3 位数字就中断该值 而不是 3 位
  • EaselJS Alpha 遮罩滤镜

    我对 Canvas 还很陌生 我一直在尝试将图像颠倒过来EaselJS Alpha 蒙版 http www createjs com demos easeljs alphamaskreveal示例 以便初始图像清晰 并且您可以paint是模
  • 性能方面插值(直接插入字符串)VS串联[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何实现 chromecast 对 html5 播放器的支持

    我使用js和html5设计了一个具有一些自定义功能的html5播放器 现在我需要在html5播放器上添加chromecast选项 例如https raw githubusercontent com kim company videojs c
  • 掩码输入数字 - 百分比

    如何通过 jQuery 创建具有百分比的数字掩码输入 我是否让输入仅接受三个数字 并在用户完成输入时在数字后添加百分号 keyup 我不使用插件 例子 1 Or 30 Or 99 Or 100 Or 200
  • 显示对象内容 - JS/jQuery

    With this data events 返回 object Object 我需要看看里面到底发生了什么 我找到了这个 var Finder each this data events function i n Finder Name i
  • SplFileObject + LimitIterator + 偏移量

    我有两行数据文件 两行仅用于我的示例 实际上 该文件可以包含数百万行 并且我使用 SplFileObject 和 LimitIterator 进行偏移 但这种组合在某些情况下会有奇怪的行为 offset 0 file new SplFile
  • 将文件附加到 PHPMailer

    我目前正在开发一个项目 该项目将文件作为 blob 存储在数据库中 我需要将文件附加到电子邮件并通过 PHPMailer 发送出去 我熟悉 mail gt addAttachment 但是 这个函数似乎只接受文件路径 而我没有 我想知道是否

随机推荐

  • 将双精度型格式化为小数点后两位

    我一直试图将打印出来的答案保留到小数点后两位 所有涉及的数学都必须保持两位小数的格式 我已经尝试了一些事情 但我不确定要改变什么才能使这项工作正常进行 double pdt1 239 99 double pdt1Total double p
  • 使用 Python subprocess.call() 启动 ncurses 进程

    我正在尝试致电 ct ng http crosstool ng org 来自 SCons SConstruct 脚本 所以基本上来自 Python 使用以下方法 ret subprocess call mnt build pw build
  • 文件处理 - 再次从头开始读取[重复]

    这个问题在这里已经有答案了 我需要创建一个对象数组来保存文件中的记录 我不知道数组的大小 为此 我必须首先找到文件中的行数 使用行数可以确定数组的大小 现在我需要从头开始再次读取文件 以将文件中的记录存储在数组对象中 这就是我正在挣扎的地方
  • 如何获取php中具有特定文件夹名称的所有子目录?

    我发现我可以在 php 中使用以下代码获取该文件夹的所有子目录 address new RecursiveIteratorIterator new RecursiveDirectoryIterator root RecursiveDirec
  • 如何避免依赖注入构造函数的疯狂?

    我发现我的构造函数开始看起来像这样 public MyClass Container con SomeClass1 obj1 SomeClass2 obj2 随着参数列表的不断增加 既然 Container 是我的依赖注入容器 为什么我不能
  • 我如何使用 AngularJS 和serializeJSON cfquery

    我想看看 AngularJS 带有 cf 后端 我有以下代码 它提取一个名为 getIndex 的常规 cfquery 该查询每行提取五行列 firstName lastName var theQuery
  • 如何存储 Android 对话框中的编辑文本数据?

    我已经设置了一个包含多个编辑文本的警报对话框 但我不确定如何存储在警报对话框中输入的值 通常我可以这样做 final EditText input new EditText this alert setView input Editable
  • 如何在Java中互相使用两个类的方法?

    我环顾四周 只找到了一个答案 至少对我来说还不够清楚 我正在使用 GUI 构建一个非常基本的聊天应用程序 并将 GUI 与连接部分分开 现在我需要从服务器类中的 GUI 调用一种方法 反之亦然 但我不太明白该怎么做 即使是 这个 部分代码如
  • Pyinstaller 和 PyQt5 macOS Mojave 兼容性问题

    我的应用程序是使用 Pyinstaller 创建的 在我从 High Sierra 升级到 Mojave 之前一直运行良好 为了演示这个问题 我创建了一个简单的应用程序 主窗口只有一个按钮 当您按下按钮时 其文本应更改为 请稍候 10 秒钟
  • 分页不接受 dict 作为数据 - 不可哈希类型

    我正在尝试使用 Django 分页分页文档 但我收到此错误 TypeError at unhashable type 这基本上是因为我使用字典作为对象而不是查询集 我想知道是否有办法将我的字典变成可哈希对象 这是我在模板中的字典 for k
  • 从对象中提取名称与测试匹配的属性

    我有一个 props 对象 它将包含一组未知的属性 我想根据它们的前缀提取其中一些属性 我有一些有用的东西 太棒了 但看起来很啰嗦 我想知道是否有更惯用的方法 const props bingo 1 bongo 2 mingo 3 bang
  • R 的 bigvis 包不适用于 R 版本 3.0.1 吗?

    我正在开发一个旨在处理大数据的应用程序 但由于绘图点数量巨大 无法以有用的方式绘制数据图表 我最初的想法是创建一个小算法 根据数据的大小 将数据点分为大约 30 个子集 并取这些子集中所有点的平均值 顺便说一下这个实现的错误是什么 然后我了
  • 从 JFrame 中删除面板后如何处置 JPanel

    我创建了 2 个 Jpanel 它将添加到 JFrame 中 首先将一个 JPanel 添加到 JFrame 中 我使用了 JFrame 的 add 方法来添加 JPanel JPanel panel new JPanel JFrame j
  • Flask-WTF 表单在 GET 请求期间出现错误

    我有一个带有 Flask WTF 表单的 Flask 视图 当我在浏览器中加载页面时 表单总是有错误 即使我还没有提交它 为什么表单在提交之前就出现错误 app route methods GET POST def index form A
  • 如何在 Linux 上使用 Selenium IDE 下载文件对话

    我必须自动化一个测试 其中我必须下载 Excel 工作表 屏幕上会出现一个文件对话框 其中包含 确定 和 取消 按钮 单击 确定 按钮会下载一个 Excel 工作表 我使用 Java 作为自动化语言 我的操作系统是Linux 请建议如何自动
  • C# Winforms DataGridView 的视觉继承问题

    From here我创建了一个BaseForm 然后设置其所有BaseForm Designer cs private会员到protected 然后就有了视觉继承 衍生Form 现在我可以重新调整大小或修改派生中的所有控件Form在设计时除
  • exec() 通过命令行运行,但不通过网络运行

    我有一个 PHP 脚本涉及exec 它可以在命令行中正常运行 但不能在网络环境中运行 脚本很简单
  • 如果某个字段结果大于或等于另一个字段,我可以更改 背景吗?

    我正在 html 表中显示 mySQL 我想将 qty 的 TD 背景颜色更改为红色IF qty gt max or qty lt min 有没有一种简单的方法可以使用 jQuery 或 PHP 来做到这一点 我为示例简化了表格和 PHP
  • 错开或阶梯菜单

    我有一个菜单 是根据通常的无序列表创建的 我想使用 CSS 对其进行水平样式设置 以便每个菜单条目都略低于前一个条目 结果将是阶梯效应 Home News About Contact 上面的示例显示了每个菜单条目的全行位移 但我真正想要的是
  • 无符号右移函数不适用于负输入

    我正在寻找一种使用方法 gt gt gt 64 位版本 PHP 5 5 14 中 JavaScript 的函数 我发现这个功能在我的谷歌搜索中 function uRShift a b z hexdec 80000000 if z a a