Tratando de resolver la solución de bits inversos utilizando los resultados de desplazamiento a la izquierda, el problema dice Reverse bits of a given 32 bits unsigned integer.
Input: n = 00000010100101000001111010011100 Output: 964176192 (00111001011110000010100101000000) Explanation: The input binary string 00000010100101000001111010011100 represents the unsigned integer 43261596, so return 964176192 which its binary representation is 00111001011110000010100101000000. Aquí, en el código de la solución, se repite 32 veces, luego se desplaza el resultado a la izquierda, y luego, si num & 1 es mayor que 0, ie its 1 Luego se incrementa el resultado y también se shift nums by 1 o nums modulus 2 y finalmente se devuelve el result
por qué el resultado es 0, any thoughts and updated solution for this code
let reverseBits = function(nums) { let result = 0 for (let i = 1; i <= 32; i++) { result <<= 1 if (nums & 1 > 0) result++ nums >>= 1 } return result } console.log(reverseBits(11111111111111111111111111111101))La salida se muestra como 0
PS C:\VSB-PRO> node Fibo.js 0Algunos asuntos:
El valor de ejemplo que pasa como argumento a su función no se da en notación binaria, sino en notación decimal, por lo que es un número diferente al previsto. Use el prefijo 0b para literales en notación binaria.
Al usar el operador << (y =<< ), JavaScript interpretará el bit 32 como un bit de signo. Supongo que no tiene la intención de producir valores negativos, así que evítelo usando una multiplicación por 2 en lugar del operador de cambio.
No hay problema, pero:
El operador >> tendrá un efecto específico en los números que tienen el bit 32 establecido: ese bit se mantendrá después del cambio. Como su secuencia de comandos nunca inspecciona ese bit, no es un problema, pero sería más natural si se cambiaran 0 bits. Para eso puedes usar el operador >>> .
Finalmente, puede ser útil generar el valor de retorno en notación binaria para que pueda verificar el resultado más fácilmente.
let reverseBits = function(nums) { let result = 0; for (let i = 1; i <= 32; i++) { // use multiplication to avoid sign bit interpretation result *= 2; if (nums & 1 > 0) result++; nums >>>= 1; } return result; } // Express number in binary notation: let n = 0b11111111111111111111111111111101; let result = reverseBits(n); // Display result in binary notation console.log(result.toString(2));