javascript - & 1 JavaScript。它是如何工作的?聪明还是善良?

标签 javascript boolean logic operators

我正在研究一个 CodeWars 问题(智商测试)的解决方案,其中给你一串数字,除了 1 之外的所有数字要么是偶数,要么是奇数。您需要返回与其他数字不同的数字位置的索引加 1。

我对下面发布的解决方案中显示 & 1 的行感到困惑。该代码在使用 && 或删除 & 1 时不起作用。

function iqTest(numbers){
  numbers = numbers.split(' ')

  var evens = []
  var odds = []

  for (var i = 0; i < numbers.length; i++) {
    if (numbers[i] & 1) { //PLEASE EXPLAIN THIS LINE!
      odds.push(i + 1)
    } else {
      evens.push(i + 1)
    }
  }

  return evens.length === 1 ? evens[0] : odds[0]
}

此外,您是否认为使用 &1 是最佳实践,还是它只是“聪明”的代码?

最佳答案

单个&'bitwise' operator 。此特定运算符 (&) 是按位 AND 运算符 - 它在两个操作数的相应位均为 1 的每个位位置返回 1。

这里使用它的方式是测试numbers[i]是偶数还是奇数。由于 i0 循环到 numbers.length,对于第一次迭代,if 语句计算 0 & 1 其计算结果为 0false。在循环的下一次迭代中,语句将为 1 & 1,其计算结果为 1true

结果 - 当 numbers[i] & 1 计算结果为 0false 时,则 numbers[i] 被推送到 odd 数组。如果 numbers[i] & 1 的计算结果为 1true,则 numbers[i] 被推送到even 数组。

测试偶数和奇数的 & 运算符的替代方法是使用 modulo operatornumbers[i] % 2 会产生相同的输出。也就是说,1 % 2 结果为 1true,就像任何奇数一样,因为奇数除以 2 会得到余数1。任何偶数,例如 2 % 2 都会导致 0false,因为偶数除以 2 会得到余数0.

至于你的第二个问题,它是“聪明还是好?”。这绝对是聪明的。它是否好取决于你问的是谁以及你的目标是什么。许多人会说它比使用 num % 2 更不逻辑且更难阅读。

关于javascript - & 1 JavaScript。它是如何工作的?聪明还是善良?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38298808/

相关文章:

javascript - SVG 覆盖我的背景颜色

javascript - Handsontable 存在问题 - 单行包含只读单元格

python : Why does False or 'name' returns 'name' and not False?

c - 是否存在这种特定排序算法不起作用的情况?

java - 如何查找字符串中字符之间的最长距离

r - Data.table 中的多个灵活的逻辑列比较

javascript - Leaflet:尝试使用 Cluster 插件时未捕获类型错误:L.markerClusterGroup 不是函数

javascript - `is` 初始化 polymer 组件的属性

c - 与字节的 boolean 运算

java - boolean 标志与它们所在的开关不对应