【问题标题】: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。这是一般功能。

标签: javascript


【解决方案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@..)

        【讨论】:

          猜你喜欢
          • 2012-11-03
          • 2014-08-13
          • 2019-06-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-01-19
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多