首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >负零(-0)是否等于C#中的零(0

负零(-0)是否等于C#中的零(0
EN

Stack Overflow用户
提问于 2010-06-29 17:50:30
回答 2查看 11.5K关注 0票数 27

负零(-0)是否等同于C#中的零(0)?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-06-29 18:04:01

对于整数,没有二进制表示法来区分0和-0,因此它们在定义上是相等的。

对于IEEE浮点数,存在负零和正零的区别。我做了一些测试( .NET Framework2.0的CLR,C# 3),似乎它们被认为是相等的,这实际上是根据IEEE754标准预期的行为。

下面是我的测试代码来说明这一点:

代码语言:javascript
复制
    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));

返回:

代码语言:javascript
复制
0 == 0 -> True
Binary representation is equal: False
票数 34
EN

Stack Overflow用户

发布于 2010-06-29 18:26:42

对于小数,至少有4种类型的零:

代码语言:javascript
复制
Decimal zero = Decimal.Zero;
Decimal negativeZero1 = new Decimal(0, 0, 0, true, 0);
Decimal negativeZero2 = -0.0m;
Decimal negativeZero3 = Decimal.Negate(Decimal.Zero);

虽然所有内容都是相等的,并打印为"0",但它们具有不同的位表示:

代码语言:javascript
复制
zero:          {0x00000000 00000000 00000000 00000000 }
negativeZero1: {0x00000000 00000000 00000000 80000000 }
negativeZero2: {0x00000000 00000000 00000000 80010000 }
negativeZero3: {0x00000000 00000000 00000000 80000000 }

来源:Decimal Negative Zero Representation

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3139538

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档