Слишком большое число для JS, расчет в итоге не верный
Перевести число в двоичную систему счисления и посчитать его единицы. На вход подается большое число например: 8816912545
Я получаю в двоичной системе число 1101100001110110100010100001, хотя ответ: 1000001101100001110110100010100001, подскажите способ как мне иначе реализовать мою функцию. Также будет интересно посмотреть другой способ подсчета единиц.
const countBits = ((n) => {
const bitRes = (n >>> 0).toString(2)
const getSplitBitres = bitRes.split('')
return getSplitBitres.reduce((acc, el) => {
return acc + +el
}, 0)
})
Ответы (1 шт):
Оператор >>> обрезает свои аргументы до 32-х бит. Если n не попадает в диапазон [-2147483648, 2147483647], число бит будет занижено.
В данной конкретной задаче можно обойтись без битовых операций (почти, n & 1 не искажает результат, так как работает только с одним младшим битом):
const countBits = n => {
n = Math.abs(n); // если нужно обрабатывать n < 0.
let bits = 0;
for (; n != 0; n = Math.floor(n / 2)) {
bits += n & 1;
}
return bits;
}
Ваш вариант тоже можно починить:
// const bitRes = (n >>> 0).toString(2)
const bitRes = n.toString(2)