2014-03-13 54 views
1

我製作了一個從遠程JSON讀取值的項目。在這個項目中,遠程JSON可以給我一個變量16種不同類型的警報。這個實現是通過一個以int表示的附加16位值來實現的。所以如果有第三次報警,它應該返回給我8(bynary 1000),如果第二次,第十次和第十次報警都返回,我會返回1284(二進制10100000100)。那麼當沒有警報時,它會返回0。 所以,我在JS中創建了一個函數(根據here),傳遞返回值(示例中的8/1284/0)會返回一個簡單的真或假,如果有一個警報。該功能是相當簡單:Javascript中的按位與操作

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

,但它不工作:-( 我創建了一個JSFiddle,顯示這個問題如何解決它預先感謝

+0

如果你不想知道具體的值return passedVal!= 0 –

回答

2

嘛,據我?理解你只需要檢查的值是否爲0沒有必要對任何位運算

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

邊注:passedVal & 0總是0無論什麼passedVal是(這是w ^它總是去else)。

0

AND運算符總是返回false,如果一個操作數是零,見下圖:

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

最簡單的方法改寫你的功能如下:

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

說明:雙重否定操作(!!)允許您將輸入轉換爲布爾值。任何非零值將評估爲true,零評估爲false。

0

檢查這個jsfiddle,它使用按位AND比較。

我已經修改了功能,使其更易於理解:

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

這需要alarmsToCheck並檢查其對alarmState比特位,如果你需要檢查多個報警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