如何在javascript中从大数中计算位?

2024-03-28

我有大量的数字存储在字符串中。

let txt = '10000000000000041';

那么我如何计算二进制格式中呈现的位呢?例如,9的二进制格式是1001,没有1的二进制格式是2。

到目前为止我做了什么:

const countOne = (num) => {
  let c = 0;
  while (num > 0) {
    num &= num - 1;
    c++;
  }
  return c;
}

console.log(countOne(+'9'));
console.log(countOne(+'10000000000000041'));

这段代码工作正常,但价值不高,因为NumberJavaScript 中无法容纳如此大的值,因此它给出了错误的答案。

我发现了类似的问题,但价值不大。


在较新的引擎(至少 Chrome、FF、Opera 和 Node)中,请参阅兼容性表 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt#Browser_compatibility),只需转换为BigInt first:

let txt='10000000000000041';
const countOne = (num) => {
  let c = 0;
  while (num > 0) {
    num &= num - 1n;
    c++;
  }
  return c;
}
console.log(countOne(BigInt(txt)));
console.log(countOne(BigInt(1)));
console.log(countOne(BigInt(2)));
console.log(countOne(BigInt(3)));
console.log(countOne(BigInt(4)));
console.log(countOne(BigInt(5)));
console.log(countOne(BigInt(6)));
console.log(countOne(BigInt(7)));
<script>
try {
  eval('1n');
} catch(e) {
  throw "Your browser doesn't support BigInt syntax yet";
}
</script>

10000000000000041以二进制形式is https://www.rapidtables.com/convert/number/decimal-to-binary.html 100011100001101111001001101111110000010000000000101001,所以 23 是正确的:

console.log(
  [...'100011100001101111001001101111110000010000000000101001']
  .reduce((a, b) => a + (b === '1'), 0)
);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在javascript中从大数中计算位? 的相关文章

随机推荐