Ответ 1
Для целых чисел нет двоичного представления, которое делает разницу между 0 и -0, поэтому они по определению равны.
Для чисел с плавающей запятой IEEE существует различие отрицательного и положительного нуля. Я провел несколько тестов (CLR.NET Framework 2.0, С# 3), и кажется, что они считаются равными, что на самом деле является ожидаемым по стандарту IEEE 754.
Вот мой тестовый код, чтобы показать, что:
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));
Возврат:
0 == 0 -> True
Binary representation is equal: False