Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

273
Vistas
¿Hay alguna diferencia entre estos dos fragmentos de código y, en caso afirmativo, cuál es?

 function addBinary(a,b) { let sum= a+b if (sum<0){ sum=0xffffffff+sum+1 } return parseInt(sum).toString(2) }

y especialmente la lógica de cómo se ha utilizado 0xffffffff para lograr el mismo resultado

 function decimalToBinary(decimal){ return (decimal >>> 0).toString(2); } function addBinary(a,b) { return decimalToBinary(a+b); }

about 4 years ago · Santiago Gelvez
1 Respuestas
Responde la pregunta

0

El operador >>> siempre interpreta el número dado como un número de 32 bits sin signo . Cuando el segundo operando es 0, nada cambia y el resultado no tiene signo.

Entonces, por ejemplo, -1 en binario es 0xffffffff en 32 bits con signo, donde el bit más significativo (a la izquierda) es el bit de signo. Pero debido a que, excepcionalmente, >>> no lo interpreta como un bit de signo, en realidad se ve como un número positivo, es decir, 0xffffffff. ¡Comparado con el -1 original, es 0x100000000 más! Esta es siempre la diferencia para las entradas negativas. Para -2 obtendrás 0xffffffffe, para -3 obtendrás 0xffffffffd, etc.

La primera función emula esto. Si la sum es negativa, debemos hacer algo, ya que la otra función (usando >>> ) nunca devolverá un número negativo.

La idea es agregar esa diferencia de 0x100000000. De hecho, el autor de esta función fue prudente y evidentemente no quería trabajar con números que excedieran el rango de 32 bits, por lo que 0x100000000 estaba fuera del tablero (usa 33 bits). Pero uno puede dividir el trabajo en partes. Podemos agregar uno menos (0xffffffff) a la suma y luego agregar el 1 restante. Sin embargo, esto es solo un juego teórico. En JavaScript no hay problema en agregar 0x100000000, por lo que también podrían haberlo hecho. Sin embargo, en otros lenguajes, aquellos que usan números de 32 bits, sería necesario agregar primero 0xffffffff y solo luego 1.

about 4 years ago · Santiago Gelvez Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda