这个符号是啥意思“&=”? [复制]

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 &lt;op&gt;= b它都等同于a = a &lt;op&gt; b。这是一般功能。 【参考方案1】:

这是按位与赋值。

在您的代码示例中,让我们看一下第一个:

allRatioAreGood &= (arr[i]/arr[i-1] == ratio);

arr[i]arr[i-1] 相互除以(产生一个比率),然后测试该比率是否相等(使用==),产生一个truefalse 值。

然后将该值与allRatioAreGood 的现有值进行按位与运算,这意味着如果allRatioAreGood 的先前值是假的(二进制0),那么allRatioAreGood 的所有未来值也将结果为假(由于 AND 运算,0 & 1 = 0)。

这样做的结果是allRatioAreGoodallDiffAreGood 确定该数组中的所有值是否都通过了相等性测试,也就是说,如果所有值都具有“良好的比率”或“良好的差异” .

但是,在这个特定示例中,比较器正在检查比率和除法结果之间的相等性,这意味着由于除法运算的结果是浮点数,因此在以下情况下没有其他数字会等于它使用== 进行测试。要测试“足够接近的等于”,需要使用 epsilon。有关更多信息,请参阅其他 SO 答案:What's wrong with using == to compare floats in Java?(不要担心这是 Java 与 javascript,概念是相同的)。此外,这变得更加复杂,因为在 Javascript 中,如果 ratio 或除法运算的结果是 NaNInfinity,则在比较两个数字时总是会得到 false

来自文档:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Assignment_Operators

按位与赋值

按位与赋值运算符使用两个操作数的二进制表示,对它们进行按位与运算并将结果分配给变量。有关详细信息,请参阅按位 AND 运算符。

语法

操作员:x &amp;= y 含义:x = x &amp; y

例子

var bar = 5;
// 5:     00000000000000000000000000000101
// 2:     00000000000000000000000000000010
bar &= 2; // 0

【讨论】:

【参考方案2】:

a &amp;= b;

同说:

a = a &amp; b;

那么为什么要使用这种形式呢?也许你有一个更复杂的表达式,并且想明确aa 是同一个左值:

obj.array[index].bits = obj.array[index].bits &amp; mask;

对比:

obj.array[index].bits &amp;= mask;

【讨论】:

【参考方案3】:

它是一个位运算符:

result = expression1 & expression2

a &amp;= b; 等价于a = a &amp; b;

MDN Docs on bitwise operators

【讨论】:

【参考方案4】:

按位分配AND,如果你有5 &amp; 3,使用按位将数字转换为基数2,即0010100011(前面还有很多0)并得到1因为一个人的数字都是1 (true)

通常,&amp;&amp; 是乘法,其中 || 是加法,按位也是如此,1 &amp; 11 * 11 | 11 + 1,这是真的(尽管它仍然被认为是 @ 987654333@..)

【讨论】:

以上是关于这个符号是啥意思“&=”? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

&: 在红宝石中是啥意思,它是一个混合了符号的块吗? [复制]

这个符号在 C++ 中是啥意思? [复制]

Python 方法签名中的 ->(破折号大于箭头符号)是啥意思? [复制]

字符串文字前的符号“@”是啥意思? [复制]

=& 是啥意思? [复制]

>& 在命令中是啥意思? [复制]