我有大量的数字存储在字符串中。
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'));
这段代码工作正常,但价值不高,因为Number
JavaScript 中无法容纳如此大的值,因此它给出了错误的答案。
我发现了类似的问题,但价值不大。
在较新的引擎(至少 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(使用前将#替换为@)