0

단일 정수에 30 개 이상의 플래그 (0/1)를 저장해야합니다. 내가 할 수이 잘 작동단일 정수에 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은 역순으로 (칭찬 또는 음수) 들어가기 때문에 30 개 이상의 플래그를 만들 수 없습니다.

이렇게 할 방법이 있습니까?

+0

무엇이 문제입니까? 비트는 여전히 올바르게 저장됩니다. – fafl

+0

'FLAG_16 '의 정의는 무엇입니까? 우리는 이것을 다음과 같이 가정해야합니다 : var FLAG_16 = 1 << 16; – Ahmad

+0

javasacript에는 정수의 개념이 없습니다. 비트 연산자를 사용하면 음수가 아닌 31 비트를 얻을 수 있습니다 (1 << 0-1 << 30 - 31 값) 그리고 여전히 1 << 31을 신중하게 사용할 수 있습니다 ... 그래서 32 이상을 가지고 있다면 더 이상 창조 할 필요가 있습니다 –

답변

1

예. 함께 연결된 32 비트 숫자를 두 개 이상 사용합니다. 말할 필요가 없다는 것을 알고 있으면 두 개의 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

이것은 내 마음에 있습니다. 또한. 나는 단지 몇 가지 다른 재판을 기다릴 뿐이다. :-) –