我不理解条件((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;
}
我问过周围和人们谈论按位运算符。有人可以解释这种情况尽可能简单吗?我理解“正常”的逻辑运算符。
答案 0 :(得分:1)
这些不是逻辑运算符,它们根本不同。您需要了解数字的二进制表示。例如,如果a = 7
和b = 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}}。