为什么负零等于正零?

时间:2015-12-12 02:43:00

标签: c# signed

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

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

输出显示为" True"。

至于每个人显然都在用" Int默认为0。"我应该指出,浮动和双打做同样的事情,在负和正零之间的平等中返回真实。

我认为这可能与图形的概念有关,其中负零点和正零点将在同一维度点内正交存在。还是他们之间存在平等的另一个原因是什么?

3 个答案:

答案 0 :(得分:8)

使用two's complement完成否定int。也就是说,反转这些位并添加一位。无论位长度如何,如果以零值执行此操作,则返回零。

例如0000翻转变为1111,添加1会回滚到0000

这是为了消除两个零的冗余。

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

答案 1 :(得分:4)

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

另外,当你说"在计算机编程中,存在正负零。"嗯,为1s补充,但不是两个补充。我认为现在任何架构都不会使用1s补充。

  

"或者他们之间是否存在平等的另一个原因?"

出于同样的原因我在上面说过。我不认为我想生活在一个发生这种情况的世界里。

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

这会导致很多错误。

答案 2 :(得分:-3)