Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

205
Views
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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!