0

私は JavaScript で 4 ビットの数値表現を持っています。これは 1 日の 4 時間 (朝、午後、夕方、夜) を表します。

たとえば、10 進数で 13 (1101) という数字があるとします。これは、夜、夕方、朝 (2 番目のビットが 0 であるため、午後ではありません) に何らかのアクションを実行する必要があることを表しています。

これまでに行ったことは、日を表す 4 ビットの数字 (1000 は夜、0100 は夕方、0010 は午後、0001 は朝) を取得することであり、2 つの数値を比較する関数を作成することです。特定の位置のビットが 1 に等しい場合に true を返します。

私はビット単位の演算子を認識していますが、それらを使用しようとしましたが、まだ運がありません。

4

2 に答える 2

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 
于 2013-03-23T19:18:32.033 に答える
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

于 2013-03-23T19:38:02.697 に答える