首页 > 解决方案 > 为什么符号位为零时浮点数为正?

问题描述

我觉得这种选择 0 = 正与布尔值有点相反,布尔值有 0 = 假。

我知道肯定的反义词不是错误的,但是两组对映术语(真假,正负)足够相关,我觉得这个设计选择很奇怪。

标签: architecturefloating-pointoperating-systembooleanbit

解决方案


假设我们遵循您的逻辑并让正数的符号位为 1,负数的符号位为 0。让我们使用 4 位数字来处理两种情况:

  1. 在传统的符号位中,零表示为0000。这里的符号位与正数一到七相同。您是否要将表示中的零1000与系统中其他正整数的符号位相匹配?这意味着0000将代表其他一些负数……这很令人困惑。我们需要两个心智模型来理解有符号数和无符号数。

  2. 假设我们通过将其保留为来避免了零问题,0000但我们使第一由1001(或什至1000)表示。这意味着如果我们这样做了,1+1我们会做1001 + 1001等于0010(或1000 + 1000 = 0000),因为我们放弃了最后一个进位。所以在你的新表示中,这意味着1+1现在等于一个负数。那没有意义。

正数的符号位为 0,负数为 1 的美妙之处在于 a) 如果将任意两个数字相加,只要它们的答案在其范围内(4 位数字的范围为 -8 到 7),则加法将正确运行,并且 b) 我们通常的零的心理模型0000仍然存在,并且有符号数和无符号数之间具有一致性。


推荐阅读