È meno zero (-0) equivalente a zero (0) in C#?È zero (-0) equivalente a zero (0) in C#
risposta
Per gli interi, non esiste alcuna rappresentazione binaria che faccia differenza tra 0 e -0, quindi sono per definizione uguali.
Per i numeri a virgola mobile IEEE, esiste una distinzione tra zero negativo e positivo. Ho effettuato alcuni test (CLR di .NET Framework 2.0, C# 3) e sembra che siano considerati uguali, il che è in realtà il comportamento previsto secondo lo standard IEEE 754.
Ecco il mio codice di prova per dimostrare che:
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));
Returns:
0 == 0 -> True
Binary representation is equal: False
'double negativeZero = -0.0' restituisce gli stessi risultati, il che significa che la costante' -0.0' viene correttamente analizzata nel valore "zero negativo" di un doppio. – Lucero
if (-0 == 0) Console.WriteLine("YES, it is!");
per i decimali, ci sono almeno 4 tipi di zeri:
Decimal zero = Decimal.Zero;
Decimal negativeZero1 = new Decimal(0, 0, 0, true, 0);
Decimal negativeZero2 = -0.0m;
Decimal negativeZero3 = Decimal.Negate(Decimal.Zero);
Mentre tutti sono uguali e stampati come "0"
, hanno una rappresentazione bit diversa:
zero: {0x00000000 00000000 00000000 00000000 }
negativeZero1: {0x00000000 00000000 00000000 80000000 }
negativeZero2: {0x00000000 00000000 00000000 80010000 }
negativeZero3: {0x00000000 00000000 00000000 80000000 }
+1 - ma: il tuo binario 'negativeZero1' e' negativeZero3' sembrano più o meno gli stessi per me? – Lucero
- 1. È negativo (negativo) lo zero equivalente a 0 in PHP?
- 2. Cosa significa zero in Handler.sendEmptyMessage (0)
- 3. Come includere "zero"/"0" in COUNT aggregato?
- 4. Zero meno lo zero equivalente all'infinito?
- 5. Come riempire una matrice con zero (0)
- 6. jQuery: array zero vs function get zero: [0] vs get (0)
- 7. Qual è il significato di char zero (0) in Java?
- 8. CoInitialize (zero) e CoInitializeEx (0, COINIT_MULTITHREADED) differenza
- 9. perché `x [0]` restituisce un vettore a lunghezza zero?
- 10. Sostituire i valori NaN in un elenco con zero (0)
- 11. Terminazione stringa - char c = 0 vs char c = '\ 0'
- 12. Perché inizializzare HashSet <> (0) su zero?
- 13. Stampa Python "0" * 5 equivalente in C#
- 14. $ {BASH_SOURCE [0]} equivalente in zsh?
- 15. Come stampare zero zero in Python
- 16. Numerazione mensile a zero
- 17. a zero dimensioni malloc
- 18. Perché C# 3 consente la conversione implicita dello zero letterale (0) in qualsiasi Enum?
- 19. Struttura CUDA rilegata zero zero
- 20. {0, 0} inizializzerà l'array nella struct?
- 21. NULL è sempre zero in C?
- 22. divisione per zero - c programmazione
- 23. 0E30 non è ZERO
- 24. Che cosa significa == $ 0 (doppio uguale a zero dollari) significa in Chrome Developer Tools?
- 25. Conversione di tutti i valori non numerici a 0 (zero) in Python
- 26. Perché 0 (zero) viene stampato senza "0x" iniziale con C printf formato "% # x"?
- 27. Perché -0 === 0 è vero?
- 28. In che modo std :: cout stampa zero zero in un sistema a complemento a un complemento?
- 29. Perché memset sockaddr_in a 0
- 30. Le variabili globali sono sempre inizializzate a zero in C?
Sembra come qualcosa che si potrebbe avere facilmente da sé testato. –
Volevo solo verificare se ci fossero delle incognite sconosciute - se capisci cosa intendo? – Ben
@Evan - test chiaramente se 0 == -0 è banale, e infatti ho eseguito questo controllo prima di postare. Nota la mia parola "equivalente". Stavo cercando la discussione intorno alla domanda, che tutti abbiamo avuto. Grazie a Lucero in particolare. – Ben