无法理解这种情况

时间:2013-09-12 12:03:03

标签: javascript bitwise-operators

我不理解条件((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;
}

我问过周围和人们谈论按位运算符。有人可以解释这种情况尽可能简单吗?我理解“正常”的逻辑运算符。

3 个答案:

答案 0 :(得分:1)

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

b

所以 a 00000111 b 00001100 a&b 00000100 。同样,7 & 12 = 4是按位而不是逻辑或。

答案 1 :(得分:0)

人们谈论按位运算符是正确的:http://en.wikipedia.org/wiki/Bitwise_operation 在这种情况下,如果win[i]在某个位置不包含二进制1,则整个条件为真,其中score也没有二进制1.(换句话说,按位含义{{1} } =&gt; win[i]

答案 2 :(得分: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时,true函数返回score,其二进制表示形式为1,其中wins[i]值为1 score。因此,10000111必须至少填充这些位。

例如,二进制值为10000111 & 00000111(135)的分数正常,00000111为{{1}}。