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

207
Vistas
C# Cálculo Bitwise Xor que parece fácil en R o nodeJS

En R, si hago bitXor(2496638211, -1798328965) , obtengo 120 devueltos.

En nodeJS 2496638211 ^ -1798328965; devuelve 120.

¿Cómo hago esto en C#? (Creo que estoy luchando por entender la declaración de tipo c# y la forma en que R & nodeJS presumiblemente se convierten a 32 bits)

about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

En C# tendrías que usar unchecked y convertir a int:

 unchecked { int result = (int)2496638211 ^ -1798328965; Console.WriteLine(result); // Prints 120 }

Podrías escribir un método para hacer esto:

 public static int XorAsInts(long a, long b) { unchecked { return (int)a ^ (int)b; } }

Entonces llámalo:

 Console.WriteLine(XorAsInts(2496638211, -1798328965)); // Prints 120

Tenga en cuenta que al convertir a int , está desechando los primeros 32 bits del long . Esto es lo que está haciendo bitXor() , pero ¿está realmente seguro de que este es el comportamiento que desea?

about 4 years ago · Juan Pablo Isaza Denunciar

0

2496638211 es mayor que un entero de 32 bits y en sistemas de 64 bits con enteros de C# los valores predeterminados son largos, por lo que la representación del valor hexadecimal es 0x94CFAD03 . Ese 9 se superpone con los bits de signo. Esto también significa que -1798328965 da como resultado 0xFFFFFFFF94CFAD7B debido a la representación de números negativos. Entonces C# obtiene 0xFFFFFFFF00000078 que es la respuesta correcta.

JS XOR usa operandos de 32 bits, por lo que trunca 2496638211 . Por lo tanto, JS obtiene 0x00000078 que técnicamente no es la respuesta correcta. Mi suposición es que R hace lo mismo o similar.

En JS use Number.isSafeInteger() así como Number.MAX_SAFE_INTEGER . En C# verifique int.MaxValue vs long.MaxValue para ver la diferencia vs JS.

Para recrear el comportamiento de JS en C#, envuélvalo en un bloque unchecked marcar según la publicación de Matthew Watson. La palabra clave unchecked se usa para suprimir la verificación de desbordamiento para conversiones y operaciones aritméticas de tipo integral.

about 4 years ago · Juan Pablo Isaza 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