我必须将超过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
反向(赞美或负数)。
有没有办法做到这一点?
答案 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的集合。每个可以通过调用函数来处理,传递迭代器和标志。