负零(-0)是否等同于C#中的零(0)?
发布于 2010-06-29 18:04:01
对于整数,没有二进制表示法来区分0和-0,因此它们在定义上是相等的。
对于IEEE浮点数,存在负零和正零的区别。我做了一些测试( .NET Framework2.0的CLR,C# 3),似乎它们被认为是相等的,这实际上是根据IEEE754标准预期的行为。
下面是我的测试代码来说明这一点:
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
发布于 2010-06-29 18:26:42
对于小数,至少有4种类型的零:
Decimal zero = Decimal.Zero;
Decimal negativeZero1 = new Decimal(0, 0, 0, true, 0);
Decimal negativeZero2 = -0.0m;
Decimal negativeZero3 = Decimal.Negate(Decimal.Zero);
虽然所有内容都是相等的,并打印为"0"
,但它们具有不同的位表示:
zero: {0x00000000 00000000 00000000 00000000 }
negativeZero1: {0x00000000 00000000 00000000 80000000 }
negativeZero2: {0x00000000 00000000 00000000 80010000 }
negativeZero3: {0x00000000 00000000 00000000 80000000 }
https://stackoverflow.com/questions/3139538
复制相似问题