¿Tiene cero cero (-0) equivalente a cero (0) en C#?Es menos cero (-0) equivalente a cero (0) en C#
Respuesta
En el caso de los enteros, no hay una representación binaria que marque la diferencia entre 0 y -0, por lo que son por definición iguales.
Para los números de coma flotante IEEE, existe una distinción de cero negativo y positivo. Hice algunas pruebas (CLR de .NET Framework 2.0, C# 3) y parece que se consideran iguales, que en realidad es el comportamiento esperado de acuerdo con el estándar IEEE 754.
Aquí está mi código de prueba para demostrar que:
double minusOne = -1.0;
double positiveZero = 0.0;
double negativeZero = minusOne*positiveZero;
Console.WriteLine("{0} == {1} -> {2}", positiveZero, negativeZero, positiveZero == negativeZero);
Console.WriteLine("Binary representation is equal: {0}", BitConverter.DoubleToInt64Bits(positiveZero) == BitConverter.DoubleToInt64Bits(negativeZero));
Devuelve:
0 == 0 -> True
Binary representation is equal: False
'double negativeZero = -0.0' también produce los mismos resultados, lo que significa que la constante' -0.0' se analiza correctamente en el valor de "cero negativo" de un doble. – Lucero
if (-0 == 0) Console.WriteLine("YES, it is!");
para decimales, hay por lo menos 4 tipos de ceros:
Decimal zero = Decimal.Zero;
Decimal negativeZero1 = new Decimal(0, 0, 0, true, 0);
Decimal negativeZero2 = -0.0m;
Decimal negativeZero3 = Decimal.Negate(Decimal.Zero);
Mientras que todos están iguales e impresos como "0"
, tienen una representación de bits diferente:
zero: {0x00000000 00000000 00000000 00000000 }
negativeZero1: {0x00000000 00000000 00000000 80000000 }
negativeZero2: {0x00000000 00000000 00000000 80010000 }
negativeZero3: {0x00000000 00000000 00000000 80000000 }
+1 - pero: su '' binario 'negativeZero1' y' negativeZero3' parecen bastante iguales para mí? – Lucero
- 1. jQuery: matriz cero vs función obtener cero: [0] vs get (0)
- 2. ¿Cuál es el significado de char cero (0) en Java?
- 3. Delimitador cero de barra invertida '\ 0'
- 4. ¿por qué `x [0]` devuelve un vector de longitud cero?
- 5. ¿Qué es '\ 0' en C++?
- 6. ¿Por qué C# 3 permite la conversión implícita del cero literal (0) a cualquier Enum?
- 7. ¿Cuál es el equivalente de argv [0]?
- 8. 1/252 = 0 en C#?
- 9. 0 + 0 + 0 ... + 0! = 0
- 10. Cómo eliminar los primeros 0 (cero) de la cadena en C# 2.0
- 11. ¿Qué es! 0 en C?
- 12. 0E30 no es cero
- 13. HTTPRequest.Files.Count Nunca es igual a cero
- 14. PHP considera nulo es igual a cero
- 15. ¿Por qué se imprime 0 (cero) sin "0x" al comienzo con el formato C printf "% # x"?
- 16. ¿NULL siempre es cero en C?
- 17. ¿Qué es decltype (0 + 0)?
- 18. ¿Qué es un cero incrustado?
- 19. Volcar números denormalizados a cero
- 20. C# GetProcAddress Devuelve cero
- 21. ¿000,000,000.00 es mayor que cero?
- 22. WPF ActualWidth es cero
- 23. ¿Por qué es (Infinity | 0) === 0?
- 24. jQuery Animate relleno a cero
- 25. ¿Por qué FLT_MIN es igual a cero?
- 26. (objeto) == 0 (objeto) 0
- 27. System.out.println() terminan en cero Código
- 28. SSE: recíproco si no es cero
- 29. jstl cero negativo
- 30. Enviando un mensaje a cero en Objective-C
parece como algo que podría fácilmente haber probado a sí mismo. –
Solo quería comprobar si había incógnitas desconocidas, si sabes a qué me refiero? – Ben
@Evan - probando claramente si 0 == -0 es trivial, y de hecho realicé esta comprobación antes de publicar. Tenga en cuenta mi palabra "equivalente". Estaba buscando la discusión sobre la pregunta, que todos obtuvimos. Gracias a Lucero en particular. – Ben