运算符|=在JavaScript中做什么?
我在一个JS项目中发现了以下代码:运算符|=在JavaScript中做什么?,javascript,operator-keyword,Javascript,Operator Keyword,我在一个JS项目中发现了以下代码: var a = new Array(); a[0] = 0; for (var b = 0; b < 10; b++) { a[0] |= b; } 相当于 x = x | y; 其中,|表示按位或。与大多数赋值运算符一样,它相当于再次使用左手值应用运算符: a |= b a = a | b 就像 a += b a = a + b 期待更多 [编辑:大脑衰竭,混淆了|和| |。需要更多咖啡。修改如下] 由于|是按位OR运算符,a | b的结
var a = new Array();
a[0] = 0;
for (var b = 0; b < 10; b++) {
a[0] |= b;
}
相当于
x = x | y;
其中,
|
表示按位或。与大多数赋值运算符一样,它相当于再次使用左手值应用运算符:
a |= b
a = a | b
就像
a += b
a = a + b
期待更多
[编辑:大脑衰竭,混淆了|和| |。需要更多咖啡。修改如下]
由于|
是按位OR运算符,a | b
的结果将是表示位字符串的整数,其中包含a
和b
的所有1位。请注意,javascript没有本机int或bitstring类型,因此它将首先将a
和b
转换为int,然后对位执行按位或。所以二进制中的9 | 2是1001 | 0010=1011,这是11,但8 | 2=8
其效果是将b
的标志位添加到a
中。因此,如果您有一些标志weevillflag=parseInt(000011000,2)
:
将该位设置为a中的1
a[0] |= b
基本上
a[0] = a[0] | b
“|”是一个
更新
当分配了a[0]
时,二进制的a[0]
为0000
。在循环中
a[0] = 0 (base 10) = 0000 (base 2)
b = 0 (base 10) = 0000 (base 2)
---------------
a[0] | b = 0000 (base 2) = 0 (base 10)
a[0] = 0 (base 10) = 0000 (base 2)
b = 1 (base 10) = 0001 (base 2)
---------------
a[0] | b = 0001 (base 2) = 1 (base 10)
a[0] = 1 (base 10) = 0001 (base 2)
b = 2 (base 10) = 0010 (base 2)
---------------
a[0] | b = 0011 (base 2) = 3 (base 10)
a[0] = 3 (base 10) = 0011 (base 2)
b = 3 (base 10) = 0011 (base 2)
---------------
a[0] | b = 0011 (base 2) = 3 (base 10)
a[0] = 3 (base 10) = 0011 (base 2)
b = 4 (base 10) = 0100 (base 2)
---------------
a[0] | b = 0111 (base 2) = 7 (base 10)
a[0] = 7 (base 10) = 0111 (base 2)
b = 5 (base 10) = 0101 (base 2)
---------------
a[0] | b = 0111 (base 2) = 7 (base 10)
a[0] = 7 (base 10) = 0111 (base 2)
b = 6 (base 10) = 0110 (base 2)
---------------
a[0] | b = 0111 (base 2) = 7 (base 10)
a[0] = 7 (base 10) = 0111 (base 2)
b = 7 (base 10) = 0111 (base 2)
---------------
a[0] | b = 0111 (base 2) = 7 (base 10)
a[0] = 7 (base 10) = 0111 (base 2)
b = 8 (base 10) = 1000 (base 2)
---------------
a[0] | b = 1111 (base 2) = 15 (base 10)
a[0] = 15 (base 10) = 1111 (base 2)
b = 9 (base 10) = 1001 (base 2)
---------------
a[0] | b = 1111 (base 2) = 15 (base 10)
在循环结束时,
a[0]
的值为15
在每个位位置返回一个值,其中一个或两个操作数的对应位为一
代码:
结果=a | b
^
是按位异或运算符,它为每个位置返回一个1,其中其操作数的一个(不是全部)对应位为1。下一个示例返回4(0100):这与逻辑or相同?例如,var a=“title”| | xYou混淆了逻辑OR和按位OR.Bah。按位或非逻辑或。大脑是有趣的东西。现在修好了。有惯用的意思吗?或者一些技巧,比如当你用~
?@katspaugh向下浮动时。例如,它可以用于高效编码和特权检查(这也适用于OP代码)。阅读。@katspaugh你所说的“带~~的地板向下浮动”是什么意思?我从没听说过这样的事@user1638092很高兴能为您提供帮助:)而且为了明确起见,步骤4、6、7、8和10都是冗余的,所以这个循环是性能提高的一个很糟糕的例子……我刚刚意识到它来自这里的代码@razpeitia读了这个问题,你会发现这个URL。。。
a[0] = 7 (base 10) = 0111 (base 2)
b = 7 (base 10) = 0111 (base 2)
---------------
a[0] | b = 0111 (base 2) = 7 (base 10)
a[0] = 7 (base 10) = 0111 (base 2)
b = 8 (base 10) = 1000 (base 2)
---------------
a[0] | b = 1111 (base 2) = 15 (base 10)
a[0] = 15 (base 10) = 1111 (base 2)
b = 9 (base 10) = 1001 (base 2)
---------------
a[0] | b = 1111 (base 2) = 15 (base 10)