检查某个位置的位是否为1

时间:2013-03-23 19:09:38

标签: javascript algorithm bit-manipulation

我在JavaScript中有一个4位数字表示,代表一天中的4次(早上,下午,晚上,晚上)。

所以我说我的数字是十进制的13(1101),它表示必须在夜晚,晚上和早上完成一些动作(而不是下午,因为第二位是0)。

到目前为止我所做的是得到代表当天的4位数字(1000是夜晚,0100是晚上,0010是下午,0001是早晨),我想要做的是创建一个比较2个数字,如果某个位置的位等于1,则返回true。

我知道按位运算符,但我尝试使用它们但仍然没有运气。

2 个答案:

答案 0 :(得分:2)

是的,按位。您可以使用简单的位掩码测试。

var PERIODS_OF_DAY = {
  MORNING: 1, AFTERNOON: 2, EVENING: 4, NIGHT: 8
};

var isPeriodOfDay = function(number, period) {
  return !!(number & period);
};

测试号码13

for (period in PERIODS_OF_DAY) {
    if(PERIODS_OF_DAY.hasOwnProperty(period)) {
        console.log(period + ":", isPeriodOfDay(13, PERIODS_OF_DAY[period]));
    }
}

MORNING: true
AFTERNOON: false
EVENING: true
NIGHT: true 

答案 1 :(得分:0)

function getTimes (value, time) {
    var times = ["morning", "afternoon", "evening", "night"];

    if (time) {
        return !(~value & 1 << times.indexOf(time));
    }

    return times.filter(function(time, i) { return !(~value & 1 << i); });
}

console.log(getTimes(13, "afternoon")); // false
console.log(getTimes(13)); // ["morning", "evening", "night]

JSFiddle