在一个整数中存储30多个标志

时间:2016-11-29 08:12:12

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

我必须将超过30个标志(0/1)存储到一个整数中。我可以使用Bitwise运算符在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反向(赞美或负数)。

有没有办法做到这一点?

1 个答案:

答案 0 :(得分:1)

是。使用多个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的集合。每个可以通过调用函数来处理,传递迭代器和标志。