1

状態がわかりません((wins[i] & score) === wins[i])score値でwins[i]あり、整数を含む配列内の要素です。それらはブール値であるかのように比較されます。教えてください。

wins = [7, 56, 448, 73, 146, 292, 273, 84];

win = function (score) { //score is an int value
    for (var i = 0; i < wins.length; i += 1) {
        if ((wins[i] & score) === wins[i]) {
            return true;
        }
    }
    return false;
}

私は周りに尋ね、人々はビット単位の演算子について話しました。誰かが状態をできるだけ簡単に説明できますか? 「通常の」論理演算子を理解しています。

4

3 に答える 3

1

これらは論理演算子ではなく、根本的に異なります。数値の 2 進数表現を理解する必要があります。したがって、たとえば、 ifa = 7およびb = 12、 thenは、およびa & bの両方で 1 であるビットを調べることによって評価されます。a b

  a 00000111
  b 00001100
a&b 00000100

だから7 & 12 = 4。同様に、|論理和ではなくビット単位です。

于 2013-09-12T12:08:40.130 に答える
0

ビット単位の演算子について話している人々は正しいです: http://en.wikipedia.org/wiki/Bitwise_operationwin[i]この場合、バイナリ 1 も含まれていない位置にバイナリ 1 が含まれていない 場合、条件全体が真ですscore。 (つまり、ビット単位の含意win[i]=> score)

于 2013-09-12T12:07:58.567 に答える
0

文脈がないので、ここで完全に答えることはできません。

ビットストレージとして使用される整数のバイナリ表現に関するものであることを理解する必要があります。

を使用してビットを見ることができます

[7, 56, 448, 73, 146, 292, 273, 84].map(function(v) { var s=v.toString(2);return '00000000'.slice(s.length)+s })

返す

["00000111", "00111000", "111000000", "01001001", "10010010", "100100100", "100010001", "01010100"]

関数は、ある値が持つすべてのバイナリ表現を持つを渡すとwin戻ります。したがって、少なくともそれらのビットが満たされている必要があります。truescore1wins[i]1score

たとえば、バイナリ値が10000111(135) のスコアは として OK10000111 & 00000111です00000111

于 2013-09-12T12:10:16.783 に答える