Czy minus zero (-0) odpowiada zero (0) w C#?Czy minus zero (-0) odpowiada zero (0) w C#
Odpowiedz
Dla liczb całkowitych, nie ma binarna reprezentacja sprawia, że różnica między 0 i -0, więc są one z definicji równe.
Dla liczb zmiennoprzecinkowych IEEE rozróżnia się zero ujemne i dodatnie. Zrobiłem kilka testów (CLR systemu .NET Framework 2.0, C# 3) i wydaje się, że są one uważane za równe, co w rzeczywistości jest zachowaniem oczekiwanym zgodnie ze standardem IEEE 754.
Oto mój kod test, aby pokazać, że:
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));
Powroty:
0 == 0 -> True
Binary representation is equal: False
'double negativeZero = -0.0' również daje takie same wyniki, co oznacza, że stała' -0.0' jest poprawnie przetwarzana na wartość "ujemnego zera" podwójnego. – Lucero
if (-0 == 0) Console.WriteLine("YES, it is!");
Dla dziesiętne, istnieją co najmniej 4 rodzaje zer:
Decimal zero = Decimal.Zero;
Decimal negativeZero1 = new Decimal(0, 0, 0, true, 0);
Decimal negativeZero2 = -0.0m;
Decimal negativeZero3 = Decimal.Negate(Decimal.Zero);
Choć wszystkie są równe i wydrukowane jako "0"
, mają inną reprezentację bitową:
zero: {0x00000000 00000000 00000000 00000000 }
negativeZero1: {0x00000000 00000000 00000000 80000000 }
negativeZero2: {0x00000000 00000000 00000000 80010000 }
negativeZero3: {0x00000000 00000000 00000000 80000000 }
+1 - ale: twoje binarne 'negativeZero1' i' negativeZero3' wyglądają dla mnie prawie tak samo? – Lucero
- 1. Co oznacza zero w Handler.sendEmptyMessage (0)
- 2. jQuery: array zero vs function get zero: [0] vs get (0)
- 3. get_selectedItems() [0] na RadGrid zwraca zero
- 4. C# Numer Wyjątek linia jest zawsze zero (0)
- 5. Jakie jest znaczenie char zero (0) w Javie?
- 6. Oracle SQL porównać ciągi zawierające liczby, począwszy od 0 (zero)
- 7. Dlaczego wartość float 0 (zero) PHP jest wyświetlana ze znakiem?
- 8. SELECT max (x) zwraca zero; jak mogę go zwrócić 0?
- 9. Zakończenie łańcucha - znak c = 0 vs znak c = '\ 0'
- 10. dzielenie przez zero - c programowania
- 11. zero || false i false || zero w Ruby
- 12. Traktowanie zero jako zero w sumie funkcji
- 13. W String.prototype.slice(), powinny .slice (0, -0) i .slice (0, + 0) dają ten sam wynik?
- 14. C# pusty ciąg -> zero?
- 15. Czy mnożenie liczb zmiennoprzecinkowych przez zero daje zero?
- 16. NSWindow zwraca zero (NSApplication)
- 17. Dlaczego sprawdzamy, czy (komórka == zero) w UITableViewController?
- 18. Czy członkowie struktury C++ są domyślnie inicjowani na 0?
- 19. Zatrzymaj make jeśli find -exec zwraca zero zero
- 20. Użycie request.getRemoteAddr() zwraca 0: 0: 0: 0: 0: 0: 0: 1
- 21. Zookeeper nie może otworzyć gniazda do localhost/0: 0: 0: 0: 0: 0: 0: 1: 2181
- 22. MySQL Usuń Trailing Zero
- 23. Czy to [0] jest bezpieczne w C++?
- 24. mmap z/dev/zero
- 25. Jak sprawdzić, czy liczba całkowita ma zero lub zero w Javie?
- 26. std :: array o rozmiarze zero
- 27. Zero długość wielowymiarowa tablica
- 28. Anonimowy mmap zero wypełniony?
- 29. Usuń Zero z HIGHCHART
- 30. tablice zero length vs. wskaźniki
Wygląda jak coś można z łatwością badanego siebie. –
Chciałem tylko sprawdzić, czy są jakieś nieznane niewiadome - jeśli wiesz o co mi chodzi? – Ben
@Evan - wyraźnie testując, czy 0 == -0 jest trywialne, i rzeczywiście wykonałem tę kontrolę przed wysłaniem. Zwróć uwagę na moje słowo "odpowiednik". Szukałem dyskusji wokół pytania, które wszyscy otrzymaliśmy. W szczególności dzięki Lucero. – Ben