Quiero manipular un número binario de 32 bits para contar la cantidad de "1". La entrada para mi función es el número binario como este 1111111111111111111111111111111111. Ambas situaciones no me permiten manipular y trabajar con una entrada de número binario.
Aquí está mi código:
var countingOnes = function (n) { let binx = { n: `${n.toString(2)}` }; console.log(binx); let counter = 0; for (let j = 0; j < binx.n.length; j++) { if (binx.n.charAt(j) === "0") { counter = counter; } else { counter = counter + 1; } } console.log(counter); }; countingOnes(11111111111111111111111111111101);Muchas gracias de antemano
No estoy seguro de cuál es su objetivo, pero los operadores Bitwise pueden ser lo que está buscando.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Bitwise_AND_assignment
le permiten realizar manipulación de bits a los números reales. ¿Hay alguna razón específica por la que necesita la salida como una cadena?
eche un vistazo a esto. No lo he probado por completo, pero parece funcionar asumiendo un número entero de 32 bits ...
function count1s(num = 5986) { //parse to an integer const integer = parseInt(num); //loop through and count let count = 0; for(let i = 0; i < 32; i++) { let test = integer >> (32 - i); if((test % 2) === 1) { count++; } } //return the results return count; } console.log(count1s());después de algunos cambios, he aplicado la siguiente solución:
var countingOnes = function (n) { let binx = n.toString(2); let counter = 0; for (let j = 0; j < binx.length; j++) { if (binx.charAt(j) === "0") { counter = counter; } else { counter = counter + 1; } } return counter; }; countingOnes("11111111111111111111111111111101");En lugar de considerar la entrada como un número de 32 caracteres, he considerado la entrada como una cadena de 32 caracteres. Más fácil de manipular. ¡Gracias a todos por el aporte y las sugerencias!