创建一个大的位域?

2024-01-08

我想在 JavaScript 中创建一个大的位字段,它将有效地表示多维标记数组(使用索引跳转到物理“1D”结构中的各个维度)。

我正在考虑如何将字符串用作位,而不是一堆数字,这样我就可以首先分配适当长度的字符串。数据类型、Unicode 和转换等注意事项开始发挥作用(在 JavaScript 1.3 之前也不支持 Unicode)。

不过,我对如何使用 JavaScript 实现大位字段的其他建议持开放态度。

Update:
仅供参考:平均而言,我可能会使用约 2187 位/标记(274 字节),但希望有一个能够容纳更多位的通用答案。


字符串的一个问题是它们是不可变的,因此如果您想更改任何内容,则需要重建字符串。

我只会坚持使用数字。使用按位运算符,每个数字可以容纳 32 位。

您最多可以容纳 53 位,因为 JavaScript 数字是双精度浮点,但按位运算符将其操作数转换为 32 位整数,因此您将无法使用它们来获取各个位(如果您想要,你可以通过除法的组合来完成同样的事情,Math.pow等,但会更复杂)。

这是一个基本的实现,可以让您获取、设置和取消设置各个位:

function BitField() {
    this.values = []; // You could set the length here, but it's not necessary
}

BitField.prototype.get = function(i) {
    var index = (i / 32) | 0; // | 0 converts to an int. Math.floor works too.
    var bit = i % 32;
    return (this.values[index] & (1 << bit)) !== 0;
};

BitField.prototype.set = function(i) {
    var index = (i / 32) | 0;
    var bit = i % 32;
    this.values[index] |= 1 << bit;
};

BitField.prototype.unset = function(i) {
    var index = (i / 32) | 0;
    var bit = i % 32;
    this.values[index] &= ~(1 << bit);
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

创建一个大的位域? 的相关文章

随机推荐

  • 获取两个值之间的 n 个不同的随机数,其总和等于给定数

    我想在总和为给定数字的范围内找到不同的随机数 注意 我在 stackoverflow 中发现了类似的问题 但是他们并没有完全解决这个问题 即他们不考虑范围的负下限 如果我希望随机数之和等于 1 我只需生成所需的随机数 计算总和并将每个随机数
  • 批处理文件删除早于指定日期的文件[重复]

    这个问题在这里已经有答案了 如何创建批处理文件来删除早于指定日期的文件 这似乎不起作用 DELOLD BAT echo off SET OLDERTHAN 1 IF NOT DEFINED OLDERTHAN GOTO SYNTAX for
  • 如何防止多个 Toast 重叠

    我一直在使用一个常见的 myToast 我使用 myToast cancel 在发出新的 toast 之前 对于 Android v2 3 及更早版本 这非常有效 当需要发送新的 Toast 时 如果旧的 Toast 仍在屏幕上 则会取消
  • SQL Server 2008 R2:从视图中包含的表中删除重复行

    创建表dup1 CREATE TABLE dup1 cola VARCHAR 10 colb VARCHAR 10 插入记录 INSERT INTO dup1 VALUES 1 2 INSERT INTO dup1 VALUES 1 2 I
  • Delphi XE2:禁用组件上的 vcl 样式

    我正在尝试按照有关禁用表单上控件上的颜色的示例进行操作 TStyleManager Engine RegisterStyleHook ClrMeans TwwDBComboDLG TEditStyleHook 但在注册或取消注册第 3 方控
  • C++ find 返回字符串变量 text 中的最后一个单词。字符串 getFirstWord(文本)

    我试图转到字符串的末尾 返回直到最后一个空格 然后前进直到单词的末尾并将该单词存储在空字符串中 不允许使用数组或指针 string getLastWord string text string lastword int last text
  • 检测重叠周期的算法[重复]

    这个问题在这里已经有答案了 我必须检测两个时间段是否重叠 每个期间都有开始日期和结束日期 我需要检测我的第一个时间段 A 是否与另一个时间段 B C 重叠 就我而言 如果 B 的开头等于 A 的结尾 则它们不重叠 反之亦然 我发现了以下案例
  • 对话框内的引导箱对话框

    我最近被分配到一个使用 bootbox 的项目 我当前的问题之一是在打开一个对话框后打开另一个对话框 问题是打开第二个对话框后背景阴影不会覆盖第一个对话框 有没有办法打开第二个对话框覆盖第一个对话框 EDIT function Confir
  • 有浮动工具提示的 Flot 示例吗?

    我目前正在研究一个Flot http code google com p flot 图形 即API http flot googlecode com svn trunk API txt尽管高级使用的示例没有得到广泛记录 但总体而言似乎非常强
  • 如何将图像放入 AlertDialog 中?安卓

    我不知道如何将图像放入 AlertDialog 中 我有这段代码 但我认为这是不可能的 AlertDialog Builder alert new AlertDialog Builder MessageDemo this ImageView
  • 为新用户授予默认权限或默认组

    默认行为似乎是新用户没有权限 也没有组 然而 我不想手动授予每个新用户基本权限 并且我假设他们不想等我这样做 我应该如何为新用户分配默认权限 已经提出了一些类似的问题 但对于一般情况没有明确的答案 Django默认用户权限 https st
  • @layout 引用的自定义 xml 属性

    我想用自己的 xml 属性创建一个自定义视图 我想指定一个标题布局 该布局将在我的自定义 xml 视图中膨胀 如下所示
  • plotly 3d 表面 - 将立方体更改为矩形空间

    我想要一个不在立方体中的 3D 图 因为我的 z 数据比 x 和 y 轴的比例小 10 倍 如何设置才能使 3D 绘图不是立方体 而是矩形 我希望 x y z 轴也具有相同的比例 也就是说 在此示例中 x 和 y 的范围是从 0 到 100
  • 如何以编程方式获取 aws ebs 定价?

    是否可以以编程方式下载 aws ebs 定价 我能够下载整个 AWS 服务索引文件 但没有看到列出的 Amazon EBS 我下载了 AmazonEC2 定价信息 它有 PricePerUnit 对于 EC2 实例来说意味着 但没有专门显示
  • pickle pandas DataFrame 的最快方法是什么?

    使用 Pandas 内置方法或pickle dump 标准的pickle方法如下所示 pickle dump my dataframe open test pickle p wb Pandas 内置方法如下所示 my dataframe t
  • 如何修改预构建的 Python 安装以在另一个目录中工作?

    对于预构建的自定义 Python 发行版的项目 我需要能够使用以下命令从源代码编译包pip 在已安装的环境中 最终产品的两次安装的文件系统结构可能如下所示 opt my program v1 some files custom python
  • Perl 程序用空格替换制表符

    我想编写一个 Perl 单行代码 用空格替换当前目录中一批文本文件中的所有制表符 t 而不影响可见间距 谁能告诉我如何做到这一点 这是在FAQ http perldoc perl org perlfaq4 html How do I exp
  • 是否可以创建动态嵌入功能?

    是否可以在ActionScript3中创建动态嵌入功能 例如像这样 public function embedImage path String Bitmap Embed source path mimeType image png var
  • .NET 相当于旧的 vb left(string, length) 函数

    作为一名非 NET 程序员 我正在寻找旧 Visual Basic 函数的 NET 等效项left string length 它很懒 因为它适用于任何长度的字符串 正如预期的那样 left foobar 3 foo 同时 最有帮助的是 l
  • 创建一个大的位域?

    我想在 JavaScript 中创建一个大的位字段 它将有效地表示多维标记数组 使用索引跳转到物理 1D 结构中的各个维度 我正在考虑如何将字符串用作位 而不是一堆数字 这样我就可以首先分配适当长度的字符串 数据类型 Unicode 和转换