Javascript中的按位AND运算

时间:2014-03-13 08:02:14

标签: javascript bitwise-and

我创建了一个从远程JSON读取值的项目。在这个项目中,远程JSON可以给我一个变量16种不同类型的警报。实现是以int表示的bybitary 16bit值。因此,如果有第三个警报,它应该返回8(bynary 1000),如果第二个,第八个和第十个警报结束,则返回1284(二进制10100000100)。那么当没有警报时,它会返回0。 所以,我在JS中创建了一个函数(根据here)传递返回的值(示例中为8/1284/0),如果有警报,则返回一个简单的true或false。功能很简单:

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

但它不起作用:-( 我创建了一个显示问题的JSFiddle。我该如何解决?提前谢谢。

5 个答案:

答案 0 :(得分:2)

据我所知,你只需要检查值是否为0.不需要任何按位操作。

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

旁注:passedVal & 0始终为0,无论passedVal是什么(这就是为什么它始终转到else)。

答案 1 :(得分:1)

你可以这样做

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

选中此http://jsfiddle.net/KQH43/3/

答案 2 :(得分:0)

如果其中一个操作数为零,则AND运算符始终返回false,请参见下文:

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

重写函数的最简单方法如下:

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

说明:双重否定操作(!!)允许您将输入强制转换为布尔值。任何非零值都将计算为true,零计算结果为false。

答案 3 :(得分:0)

检查此jsfiddle,它使用按位AND比较。

我修改了您的功能以便于理解:

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

它需要alarmToCheck并根据alarmState位检查其位,如果需要检查多个警报,alarmToCheck可以为多个警报提供位。

答案 4 :(得分: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