0

Я должен хранить более 30 флагов (0/1) в одно целое число. Я могу создать 30 флаговых масок в 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

В чем проблема? Биты сохраняются должным образом. – fafl

+0

Каково определение 'FLAG_16'? мы должны считать это следующим: 'var FLAG_16 = 1 << 16;' – Ahmad

+0

javasacript не имеет понятия целого числа - сказав, что, используя побитовые операторы, вы можете получить 31 бит, не переходя в отрицательные числа (1 << от 0 до 1 << 30 - это 31 значение), и вы все равно можете использовать 1 << 31 тщательно ... так что у вас есть 32 ... более того, и вам нужно будет создать творческий –

ответ

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. Каждая из них может обрабатываться путем вызова функции для выполнения работы, передачи итератора и флагов.

+0

Это то, что я получил в своем уме также. Я просто буду ждать нескольких других резонансов. :-) –