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

这些不是逻辑运算符,它们是根本不同的。您需要了解数字的二进制表示。例如,如果a = 7b = 12,则通过查看a & b中均为 1 的位来评估:a b

  a 00000111
  b 00001100
a&b 00000100

所以7 & 12 = 4。同样,|是按位而不是逻辑或。

于 2013-09-12T12:08:40.130 回答
0

谈论位运算符的人是对的:httpwin[i] ://en.wikipedia.org/wiki/Bitwise_operation 在这种情况下,如果在某个位置不包含二进制 1 ,则整个条件为真,其中score也没有二进制 1。 (换句话说,按位蕴涵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) 的分数是可以10000111 & 0000011100000111

于 2013-09-12T12:10:16.783 回答