javascript - 在单个整数中存储 30 多个标志

标签 javascript bit-manipulation bitwise-operators bit-shift

我必须将 30 多个标志 (0/1) 存储到一个整数中。我可以使用如下所示的按位运算符在 Javascript 中创建 30 个标志掩码

var FLAG_1 = 1 << 0; // 1
var FLAG_2 = 1 << 1; // 2
...
...
var FLAG_30 = 1 << 30;

var user1 = FLAG_1 | FLAG_16;

console.log(FLAG_1 & user1); // true 

这很好用。但我无法创建超过 30 个标志,因为 1 << 31相反(赞美或负数)。

有什么办法可以做到这一点吗?

最佳答案

是的。使用多个 32 位数字连接在一起。如果您知道需要少于 64 位数字,请使用两个 32 位数字。获取前 32 位并处理这些标志,然后分别获取第二个 32 位并处理这些标志。

var test = '0421';

for( var i=0; i < test.length; i += 2 ) {
   flags = parseInt( test.substr(i,2), 10 );
   console.log(flags);
   // do comparisons here
   // call function doStuff(i, flags)
}

我不确定您的初始输入值是多少。我从一个字符串开始,它可以是任意数量的 00 - 31 组。每个字符串都可以通过调用函数来完成工作、传递迭代器和标志来处理。

关于javascript - 在单个整数中存储 30 多个标志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40860764/

相关文章:

javascript - 使用 async.js 在循环中执行异步操作

c++ - 如何设置、清除和切换单个位?

c++ - 如何在 C++ 上的 "double"上使用按位运算符?

javascript - 看不到我正在制作的 inf 循环

javascript - 如何更改页面中的所有链接?

javascript - node.js + jade - 链接是自动关闭的,不应该有内容

go - 为什么在 golang 中左移 64 位不会溢出?

java - 仅增加浮点指数

c - 在 8 位 PIN 中设置一位而不更改其他位

java - 用于查找丢失的唯一 ID 的按位 XOR 运算符