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

594
Vistas
Diferencia entre los valores hexadecimales de C++ y C# para dobles

Estoy reemplazando un código C++ que escribe un archivo binario con C# (net6.0), y noto una discrepancia entre los valores escritos en el archivo.

Si tengo un valor de doble precisión igual a 0.0, C++ escribe los bytes como:

00 00 00 00 00 00 00 00

Sin embargo, C# (usando BinaryWriter) está escribiendo el mismo valor que:

00 00 00 00 00 00 00 80

Si convierto 0.0 a bytes usando System.BitConverter.GetBytes(), obtengo todos los 0x00. Si convierto los bytes con 0x80 en un doble usando BitConverter, todavía me da 0.0.

 byte[] zero = System.BitConverter.GetBytes(0.0); // 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 bool equal = 0.0 == System.BitConverter.ToDouble(new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80}); // true

Esto no parece que vaya a causar ningún problema, pero me gustaría entender qué está pasando.

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Como se menciona en los comentarios, ese byte final 0x80 es en realidad el byte alto del valor double . Entonces, el MSB que se establece es el bit de signo . Esto significa que el número que se almacena es en realidad -0.0 (que, en prácticamente todos los casos, se compara con 0.0 , por lo que no debería causar ningún problema).

De hecho, hay otros bits (en el exponente ) que pueden apostar a 1 pero aún así dejar el valor del double representado como (+/-) cero.

¿Cómo obtuvimos -0.0 ? No puedo decir sin ver el código que genera el valor pero, desde la misma página Wiki:

Se puede obtener un cero negativo como resultado de ciertos cálculos, por ejemplo, como resultado de un subdesbordamiento aritmético en un número negativo (también pueden ser posibles otros resultados), o −1,0 × 0,0, o simplemente como −0,0.

over 4 years ago · Santiago Trujillo 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