为什么负零等于正零?
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
如何表示负数
他们在数学上相等的原因相同。 -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
。
这是设计来消除具有两个零的冗余。
float
和double
,根据IEEE-754,技术上有+0
和-0
,但它们被认为是相等的。
在计算机编程中,存在正零和负零。这可能不会让您感到震惊,但奇怪的是正零等于负零这一明显事实。这是一个例子:
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
如何表示负数他们在数学上相等的原因相同。 -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
。
这是设计来消除具有两个零的冗余。
float
和double
,根据IEEE-754,技术上有+0
和-0
,但它们被认为是相等的。