我的解决方案有什么问题?(hackerrank 练习 - 按位运算)

What is wrong with my solution?(hackerrank exercise - bitwise operation)

the link for the excersize 简而言之,'n'是从1到n的一系列数字,'k'是一个数字。 我需要return a&b (a

每当我 运行 这个函数时我得到 0:

function getMaxLessThanK(n, k) {
  let maxPV = 0;
  for (let a = 1; a < n; a++) {
    for (let b = a + 1; b <= n; b++) {
      if (a & b < k && a & b > maxPV) {
        maxPV = (a & b)
      }
    }
  }
  return maxPV
}

这是一个 operator precedence 问题。

比较运算符(<>、...)的优先级高于按位与(&),所以需要用括号进行分组:

if ((a & b) < k && (a & b) > maxPV) {
    // ...
}

完整片段:

function getMaxLessThanK(n, k) {
  let maxPV = 0;
  for (let a = 1; a < n; a++) {
    for (let b = a + 1; b <= n; b++) {
      if ((a & b) < k && (a & b) > maxPV) {
        maxPV = (a & b);
      }
    }
  }
  return maxPV;
}

console.log(getMaxLessThanK(8, 5));