Javascript 中与 64 位整数的按位 AND

2023-11-27

我正在寻找一种在 JavaScript 中对 64 位整数执行按位 AND 的方法。

JavaScript 会将其所有双精度值转换为带符号的 32 位整数以执行按位运算(详细信息在这里).


Javascript 将所有数字表示为 64 位双精度 IEEE 754 浮点数(参见ECMA脚本规范,第 8.5 节。)所有 2^53 以内的正整数都可以精确编码。较大的整数会被剪掉其最低有效位。这就留下了一个问题:如何在 Javascript 中表示 64 位整数——原生数字数据类型显然无法精确表示 64 位 int。

下图说明了这一点。虽然 JavaScriptappears为了能够解析表示 64 位数字的十六进制数字,底层数字表示不包含 64 位。在浏览器中尝试以下操作:

<html>
  <head>
    <script language="javascript">
      function showPrecisionLimits() {
        document.getElementById("r50").innerHTML = 0x0004000000000001 - 0x0004000000000000;
        document.getElementById("r51").innerHTML = 0x0008000000000001 - 0x0008000000000000;
        document.getElementById("r52").innerHTML = 0x0010000000000001 - 0x0010000000000000;
        document.getElementById("r53").innerHTML = 0x0020000000000001 - 0x0020000000000000;
        document.getElementById("r54").innerHTML = 0x0040000000000001 - 0x0040000000000000;
      }
    </script>
  </head>
  <body onload="showPrecisionLimits()">
    <p>(2^50+1) - (2^50) = <span id="r50"></span></p>
    <p>(2^51+1) - (2^51) = <span id="r51"></span></p>
    <p>(2^52+1) - (2^52) = <span id="r52"></span></p>
    <p>(2^53+1) - (2^53) = <span id="r53"></span></p>
    <p>(2^54+1) - (2^54) = <span id="r54"></span></p>
  </body>
</html>

在 Firefox、Chrome 和 IE 中,我得到以下信息。如果数字以完整的 64 位形式存储,则所有减法的结果都应该是 1。相反,您可以看到 2^53+1 和 2^53 之间的差异是如何丢失的。

(2^50+1) - (2^50) = 1
(2^51+1) - (2^51) = 1
(2^52+1) - (2^52) = 1
(2^53+1) - (2^53) = 0
(2^54+1) - (2^54) = 0

所以,你可以做什么?

如果您选择将 64 位整数表示为两个 32 位数字,则应用按位 AND 与对低位和高位 32 位“字”应用 2 个按位 AND 一样简单。

例如:

var a = [ 0x0000ffff, 0xffff0000 ];
var b = [ 0x00ffff00, 0x00ffff00 ];
var c = [ a[0] & b[0], a[1] & b[1] ];

document.body.innerHTML = c[0].toString(16) + ":" + c[1].toString(16);

让你:

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

Javascript 中与 64 位整数的按位 AND 的相关文章

随机推荐

  • matplotlib 在 NaN 之后不继续行[重复]

    这个问题在这里已经有答案了 我有一个数组切片 array 1 0 2 0 3 0 None 4 0 None 5 0 None 6 0 None dtype object which when plotted looks like 如何让虚
  • 一种将 TD 置于 TR 中心的方法?

    我正在处理 HTML 电子邮件 并尝试将绿色 TD 放在白色 TR 中 以便在绿色框的左侧和右侧有 20 像素的白色边距 我尝试设置绿色部分的 TD 宽度并将边距设置为 0 auto 但绿色仅扩展到 TR 的宽度 尝试再放入 2 个 TD
  • 在 case 不起作用的情况下颤动多重

    是否可以根据多个文档 ID 获取价值 CollectionReference col1 Firestore instance collection service col1 where title isEqualTo Ac replacim
  • 支持向量机内核类型

    支持向量机中常用的核函数是线性 径向基函数和多项式 有人可以用简单的方式解释一下这个内核函数是什么吗 由于我是这个领域的新手 我不清楚这些内核类型的重要性是什么 让我们从头开始 支持向量机是一种线性模型 它总是寻找一个超平面来将一个类与另一
  • 如何使用SBT将一些文件复制到构建目标目录?

    如何复制一些源文件 例如 src main html html 到构建输出目录 例如 target scala 2 11 与 SBT 以便文件最终位于目标根并且不在classes子目录 如果我将源目录添加到 就会发生这种情况unmanage
  • 无法创建组件,因为它需要满足依赖关系

    我正在学习 DDD n Tier Repositories 等 有人向我推荐了 ASP NET Boilerplate 我决定使用它开始一个测试项目 我从未处理过依赖注入 所以这对我来说是全新的 但它使用 ius Castle Windso
  • Jquery next 找不到下一个 div?

    我有这个 HTML 结构 img width 25 height 25 src data apple logo jpg alt Chocolate
  • 在rails 4中重构大型routes.rb文件

    我正在将 Rails 3 应用程序升级到 Rails 4 0 1 在我的 Rails 3 应用程序中 我的目录中有以下代码application rb使用多个路由文件 config paths config routes Dir Rails
  • Mysql:将日期从“dd/mm/yyyy”转换为“yyyymmdd”

    我正在开发一个数据库 该数据库将日期存储在varchar 10 mysql 字段 太悲伤了 我无法更改数据库结构 我正在构建一个小插件 但我必须查询数据库 查找该数据字段在接下来的 10 天内的行 Example fid fdate 1 1
  • 基于应用程序变体的构建配置(BuildType + Flavor)

    我正在尝试设置signingConfig manifestPlaceholders buildConfigField对于应用程序变体 我可以为每个构建类型设置它们or ProductFlavor 独立 但我需要的是根据两个 ProductF
  • JS/jQuery 图像编辑器

    有没有人偶然发现用纯 JS 或 jQuery 完成的图像编辑器 就像 CKEditor 那样 我正在寻找一段代码 为图像添加句柄 以便您可以根据需要调整其大小 甚至拖动图像 谢谢 Edit 改写了 这是很棒的图像裁剪 调整大小 JQuery
  • 如何对Spark Structured Streaming进行单元测试?

    我想了解 Spark 结构化流的单元测试方面 我的场景是 我从 Kafka 获取数据 并使用 Spark 结构化流处理并在数据之上应用一些转换来使用它 我不确定如何使用 Scala 和 Spark 对此进行测试 有人可以告诉我如何使用 Sc
  • 如何将 Monad 实例定义为具有多个值的类型?

    我所说的多个值的意思是这样的 data Foo a Bar a Baz a a 我想不出一个明确的方法来定义 gt gt for Baz instance Monad Foo where Bar x gt gt f f x Great th
  • 如何在单击第 3 方按钮时设置断点?

    我正在尝试调试第 3 方小部件 1按钮准确地说 具体来说 我想在 Chrome 中设置一个断点 当单击小部件中的按钮时该断点会停止 我想打破处理的第 3 方代码click事件 是否有 Chrome 扩展 或其他我没有想到的东西 来帮助我在代
  • 为什么 System.Convert 有接受 DateTime 的 ToDateTime?

    Summary Returns the specified System DateTime object no actual conversion is performed Parameters value A date and time
  • Codeigniter 2.1 - 插入批次后返回 ids

    如何返回 insert bunch 之后的所有 ID 功能 public function insert slike id slike folder polje tabela slike explode slike i 1 data arr
  • Mathematica 中的错误:正则表达式应用于很长的字符串

    在下面的代码中 如果字符串 s 附加到大约 10 或 20 000 个字符 Mathematica 内核段错误 s This is the first line MAGIC STRING Everything after this line
  • 使用内联汇编在 C 中添加值

    我试图掌握 C 中内联汇编 ATT 汇编 的基础知识 所以我通过添加 2 个变量进行练习 好的 这按预期工作 这src变量被复制到dst变量 然后是dst变量加 5 的值src and dst分别为1和6 int src 1 int dst
  • IOS 5 如何更改导航栏中后退按钮的颜色?

    I want to change the color of back button of a navigation bar to make it look like this Set the backBarButtonItem s tint
  • Javascript 中与 64 位整数的按位 AND

    我正在寻找一种在 JavaScript 中对 64 位整数执行按位 AND 的方法 JavaScript 会将其所有双精度值转换为带符号的 32 位整数以执行按位运算 详细信息在这里 Javascript 将所有数字表示为 64 位双精度