Javascript Can';我不明白这种情况

Javascript Can';我不明白这种情况,javascript,bitwise-operators,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] &

我不理解条件
((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;
}
wins=[7,56,448,73,146,292,273,84];
win=函数(分数){//分数是一个整数值
对于(变量i=0;i

我问过很多人,他们都在谈论位运算符。有人能尽可能简单地解释一下情况吗?我理解“普通”逻辑运算符。

人们谈论按位运算符是正确的:
在这种情况下,如果
win[i]
score
也没有二进制1的位置不包含二进制1,则整个条件为true。(换句话说,按位蕴涵
win[i]
=>
score

谈论按位运算符的人是对的:
在这种情况下,如果
win[i]
score
也没有二进制1的位置不包含二进制1,则整个条件为true。(换句话说,按位蕴涵
win[i]
=>
score

这些不是逻辑运算符,它们是根本不同的。你需要理解数字的二进制表示法。因此,例如,如果
a=7
b=12
,则通过查看
a
b
中均为1的位来计算
a和b

  a 00000111
  b 00001100
a&b 00000100

所以
7&12=4
。类似地,
|
是按位运算符,而不是逻辑or。

这些不是逻辑运算符,它们根本不同。你需要理解数字的二进制表示法。因此,例如,如果
a=7
b=12
,则通过查看
a
b
中均为1的位来计算
a和b

  a 00000111
  b 00001100
a&b 00000100

所以
7&12=4
。类似地,
|
是按位的,而不是逻辑的or。

这里我们不能完全回答,因为我们没有上下文

您必须理解,它是关于整数的二进制表示,它被用作位存储

您可以使用

[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
函数在传递一个二进制表示为
1的
score
时返回
true
,该二进制表示为
wins[i]
值为
1
。因此,您的
分数必须至少填入这些位


例如,二进制值为
10000111
(135)的分数是可以的,因为
10000111&00000111
00000111
,,我们不能在这里完全回答,因为我们没有上下文

您必须理解,它是关于整数的二进制表示,它被用作位存储

您可以使用

[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
函数在传递一个二进制表示为
1的
score
时返回
true
,该二进制表示为
wins[i]
值为
1
。因此,您的
分数必须至少填入这些位


例如,二进制值为
10000111
(135)的分数是可以的,因为
10000111&00000111
00000111
,“我理解“正常”逻辑运算符。”-另外,请注意JavaScript的逻辑运算符
|
&
可以用于非布尔操作数(在这种情况下,他们甚至不返回布尔值)。@nnnnnn这里不是关于逻辑运算符的。@dystroy-这就是为什么我说“作为旁白”并明确地输入了我的意思。OP说“就像它们是布尔值一样进行比较”,这让我怀疑他或她是否真的不知道逻辑运算符是如何工作的。”我理解“普通”逻辑运算符。-作为旁白,请注意JavaScript的逻辑运算符
|
&&
可用于非布尔操作数(在这种情况下,它们甚至不返回布尔值)。@nnnnnn这里与逻辑运算符无关。@dystroy-这就是我说“旁白”的原因并明确地输入了我的意思。OP说“比较起来就像他们是布尔人一样”,这让我怀疑他或她是否真的不知道逻辑运算符是如何工作的。例如,如果win[I]=101010,score=010101,那么条件是真的?那么真正的条件===to win[I]又是如何工作的.===是一个简单的比较逻辑运算符。不,这是一个反例,因为分数包含零,其中win[i]包含一!这里的
==
运算符并不特殊,它实际上只是检查两个整数的相等性;)因此,例如,如果win[i]=101010,分数=010101,则条件为真?另外,真实条件===如何赢得[i]。===是一个简单的比较逻辑运算符。不,这是一个反例,因为score包含零,而win[i]包含一!
==
运算符在这里并不特殊,它实际上只是检查两个整数的相等;)