2014-03-13 2 views
1

원격 JSON에서 값을 읽는 프로젝트를 만듭니다. 이 프로젝트에서 원격 JSON은 하나의 변수 16 가지 유형의 알람을 제공합니다. 구현은 int로 표현 된 바이너리 16 비트 값에 의한 다. 그래서 세 번째 경보가 있으면 8을 반환해야하고 (바이너리 1000) 두 번째, 10 번째 및 10 번째 경보가 발생하면 1284 (이진 10100000100)를 반환합니다. 그럼 아무런 경고가 0 때 나를 돌려 준다. 그래서 JS에서 함수를 생성한다. (here) 리턴 된 값 (예제에서는 8/1284/0)을 반환하면 간단한 true 또는 false가 리턴된다. 경보. 이 기능은 매우 간단하다.Javascript의 비트 AND 연산

function IsOnAlarm(passedVal) { 
    if (passedVal & 0) { 
     return false; 
    } else { 
     return true; 
    } 
} 

하지만 내가 문제를 보여줍니다 JSFiddle을 만들 :-(작동하지 않습니다 어떻게 그것을 해결할 수있는 사전에 감사

+0

특정 값을 알고 싶지 않다면 passed passed! = 0 –

답변

2

을 잘 지금까지의 내가로?. 당신은 단지 값이 어떤 비트 연산에 대한 필요가 없습니다 0인지 확인해야 이해

function IsOnAlarm(passedVal) { 
    return passedVal != 0; 
} 

사이드 참고 :. passedVal & 0이 무엇인지 passedVal에 상관없이 항상 0 없다 (즉, 승의 항상 else으로 이동). 피연산자 중 하나가 제로의 경우 항상 false를 반환

0

AND 연산자처럼 그것을 할 수 있습니다, 아래 참조 :

0 & 0 = 0 
0 & 1 = 0 
1 & 0 = 0 
1 & 1 = 1 

가장 쉬운 방법은 귀하의 기능을 다시 작성하려면 다음과 같습니다 :

function IsOnAlarm(passedVal) { 
    return !!passedVal; 
} 

설명 : 이중 부정 연산 (!!)을 사용하면 입력을 부울로 캐스팅 할 수 있습니다. 0이 아닌 값은 true로 평가되고 0은 false로 평가됩니다.

0

이것을 확인하려면 jsfiddle, 비트 AND 비교를 사용하고 있습니다. 내가 쉽게 이해할 수 있도록하기 위해 기능을 수정 한

: 여러 알람을 확인해야 할 경우가 alarmsToCheck 소요 alarmState 비트에 대하여 그것의 비트를 확인

function AreAlarmsOn(alarmsToCheck, alarmState) { 
    return and(alarmsToCheck, alarmState)!=0; 
} 

는 alarmsToCheck 여러 경보 비트를 가질 수있다.

0

이게 당신이 찾고 있는게 있나요?

var getFlags = function(val) { 
    var results = []; 
    for (var i = 0; i < 16; i++) { 
     results.push(!!((val >> i) & 1)); 
    } 
    return results; 
}; 

var flags = getFlags(1284); 

flags[2] //=> true 
flags[8] //=> true 
flags[10] //=> true 
// all other values ==> false/undefined