这个符号是啥意思“&=”? [复制]
Posted
技术标签:
【中文标题】这个符号是啥意思“&=”? [复制]【英文标题】:What does this symbol mean "&="? [duplicate]这个符号是什么意思“&=”? [复制] 【发布时间】:2016-10-10 19:42:35 【问题描述】:function ArithGeo(arr)
var diff = arr[1]-arr[0];
var ratio = arr[1]/arr[0];
var allRatioAreGood = true;
var allDiffAreGood = true;
for(var i = 2;i<arr.length;i++)
// console.log(arr[i]-arr[i-1] == diff);
allRatioAreGood &= (arr[i]/arr[i-1] == ratio);
allDiffAreGood &= (arr[i]-arr[i-1] == diff);
// code goes here
if (allRatioAreGood)
return "Geometric"
else if (allDiffAreGood)
return "Arithmetic";
else
return -1
console.log(ArithGeo([2, 4, 6, 7 , 8 ,10]));
当我们在 for 循环中使用它时,'&=' 是什么意思?它是如何工作的?有人可以解释一下吗?
另外,这两行是如何工作的?
allRatioAreGood &= (arr[i]/arr[i-1] == ratio);
allDiffAreGood &= (arr[i]-arr[i-1] == diff);
谁能解释一下?
【问题讨论】:
任何时候你看到a <op>= b
它都等同于a = a <op> b
。这是一般功能。
【参考方案1】:
这是按位与赋值。
在您的代码示例中,让我们看一下第一个:
allRatioAreGood &= (arr[i]/arr[i-1] == ratio);
值arr[i]
和arr[i-1]
相互除以(产生一个比率),然后测试该比率是否相等(使用==
),产生一个true
或false
值。
然后将该值与allRatioAreGood
的现有值进行按位与运算,这意味着如果allRatioAreGood
的先前值是假的(二进制0
),那么allRatioAreGood
的所有未来值也将结果为假(由于 AND 运算,0 & 1 = 0)。
这样做的结果是allRatioAreGood
和allDiffAreGood
确定该数组中的所有值是否都通过了相等性测试,也就是说,如果所有值都具有“良好的比率”或“良好的差异” .
但是,在这个特定示例中,比较器正在检查比率和除法结果之间的相等性,这意味着由于除法运算的结果是浮点数,因此在以下情况下没有其他数字会等于它使用==
进行测试。要测试“足够接近的等于”,需要使用 epsilon。有关更多信息,请参阅其他 SO 答案:What's wrong with using == to compare floats in Java?(不要担心这是 Java 与 javascript,概念是相同的)。此外,这变得更加复杂,因为在 Javascript 中,如果 ratio
或除法运算的结果是 NaN
或 Infinity
,则在比较两个数字时总是会得到 false
。
来自文档:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Assignment_Operators
按位与赋值
按位与赋值运算符使用两个操作数的二进制表示,对它们进行按位与运算并将结果分配给变量。有关详细信息,请参阅按位 AND 运算符。
语法
操作员:
x &= y
含义:x = x & y
例子
var bar = 5;
// 5: 00000000000000000000000000000101
// 2: 00000000000000000000000000000010
bar &= 2; // 0
【讨论】:
【参考方案2】:a &= b;
同说:
a = a & b;
那么为什么要使用这种形式呢?也许你有一个更复杂的表达式,并且想明确a
和a
是同一个左值:
obj.array[index].bits = obj.array[index].bits & mask;
对比:
obj.array[index].bits &= mask;
【讨论】:
【参考方案3】:它是一个位运算符:
result = expression1 & expression2
a &= b;
等价于a = a & b;
MDN Docs on bitwise operators
【讨论】:
【参考方案4】:按位分配AND
,如果你有5 & 3
,使用按位将数字转换为基数2,即00101
和00011
(前面还有很多0)并得到1
因为一个人的数字都是1
(true)
通常,&&
是乘法,其中 ||
是加法,按位也是如此,1 & 1
是 1 * 1
和 1 | 1
是 1 + 1
,这是真的(尽管它仍然被认为是 @ 987654333@..)
【讨论】:
以上是关于这个符号是啥意思“&=”? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
&: 在红宝石中是啥意思,它是一个混合了符号的块吗? [复制]