为什么负零等于正零?

Why is Negative Zero equal to Positive Zero?

在计算机编程中,存在正零和负零。这可能不会让您感到震惊,但奇怪的是正零等于负零这一明显事实。这是一个例子:

public static class Program
{
    public static void Main()
    {
        int positive = 0;
        int negative = -0;
        Console.WriteLine(positive == negative);
        Console.Read();
    }
}

输出显示为 "True"。

至于每个人显然都用 "Int defaults to 0." 发表评论,我应该指出浮点数和双精度数做同样的事情,返回 true 表示负零和正零之间的相等性。

我想这可能与图形的概念有关,负零和正零将正交存在于同一维度点内。或者还有其他原因使它们之间相等?

阅读 CPU

如何表示负数

https://en.wikipedia.org/wiki/Two's_complement

他们在数学上相等的原因相同。 -x 等同于 -1*x。好吧,任何东西的 0 次都是零。这相当于 -1*0 = 0。

此外,当您说 "In computer programming, there exists a positive and negative zero." 嗯, 用于 1 补码,但不是二进制补码。我认为现在没有任何架构使用 1s 补码。

"Or is there another reason for the equality between them?"

和我上面说的一样。我认为我不想生活在发生这种情况的世界里。

int x=0; 
int y= -1*x;
if (y == x) //false

那会导致很多错误。

int 使用 two's complement 完成。即,反转位并加一。无论位长如何,如果您使用零值执行此操作,您将返回零。

例如,0000 翻转后变为 1111,添加 1 则返回 0000

这是设计来消除具有两个零的冗余。

floatdouble,根据IEEE-754,技术上有+0-0,但它们被认为是相等的。