JavaScript 按位与运算符

JavaScript Bitwise And operator

这是一个 JavaScript 程序,假设 return (a & b) 的最大值也小于 k(即 a & b < k 的最大值).. . 但它 return 是一个比最大值小 1 的值... 注意:a必须小于b;

function data(n, k) {
  var res = [];

  for (var i = 1; i <= n; i++) {
    for (var j = 2; j <= n; j++) {
      if (i >= j) continue;

      let a = i.toString(2);
      let b = j.toString(2);
      var c = a & b;

      c = parseInt(c, 2);
      res.push(c)
    }
  }

  var res = res.filter(function(e) {
    return e < k;
  });
  
  return Math.max(...res);
}

console.log( data(955, 236) );

它return是234,而不是235... 我尝试过其他方法,如 Reduce 和所有...但我认为我的问题源于我比较 a 和 b 的按位和...

老实说,我不知道这段代码应该做什么......但我可以告诉你,这段代码并不像你想象的那样。

let a = i.toString(2);
let b = j.toString(2);
var c = a & b;

toString 把它变成一个字符串。 toString(2) 变成一个字符串, 表示 二进制值。这与实际值不同。

按位运算符,如 & 处理整数。编译器将尝试将字符串转换为数字...但此时它将以 10 为基数工作,因此,您将获得与预期完全不同的数字。

最像你的意思是c = i & j

您不必将数字转换为二进制。在计算机内部,它们 已经 二进制。当您要求计算机将它们显示给您时,计算机只会将它们转换为基数 10。

函数数据(n,k){ var res = 0;

  for (var a = 1; a <= n; a++) {
    for (var b = 2; b <= n; b++) {
      if (i >= j) continue;

        if ((a & b) < k && (a & b ) > res ) {
              res = ( a & b) ;
         }

    }

  }


  return res;
}
console.log ( data ( 955, 236) ) ;