为什么符号位为零时浮点数为正?
Why are floating point numbers positive when the sign bit is zero?
我觉得这个选择 0 = positive 与 0 = false 的布尔值有点相反。
我知道正反面不是假的,但是两组对映项(真假,正负)足够相关,我觉得这个设计选择很奇怪。
假设我们遵循您的逻辑,使正数的符号位为 1,负数的符号位为 0。让我们以使用 4 位数字的两种情况为例:
在传统的符号位中,零表示为0000
。这里的符号位与正数一到七相同。您是否要使表示中的零为 1000
以匹配系统中其他正整数的符号位?这意味着 0000
将代表其他一些负数……这很令人困惑。我们需要两个心智模型来理解有符号数和无符号数。
假设我们通过将其保留为 0000
来避免零问题,但我们将第一个问题表示为 1001
(甚至 1000
)。这意味着如果我们做了 1+1
,我们会做 1001 + 1001
,这等于 0010
(或 1000 + 1000 = 0000
),因为我们删除了最后一个进位。因此,在您的新表示中,这意味着 1+1
现在等于负数。这没有意义。
正数的符号位为 0 而负数为 1 的美妙之处在于 a) 如果您将任意两个数字相加,只要它们的答案在它们的范围内(4 位数字的范围为 -8到 7),加法将正确计算,并且 b) 我们通常的零心智模型 0000
仍然保持有符号数和无符号数之间的一致性。
我觉得这个选择 0 = positive 与 0 = false 的布尔值有点相反。
我知道正反面不是假的,但是两组对映项(真假,正负)足够相关,我觉得这个设计选择很奇怪。
假设我们遵循您的逻辑,使正数的符号位为 1,负数的符号位为 0。让我们以使用 4 位数字的两种情况为例:
在传统的符号位中,零表示为
0000
。这里的符号位与正数一到七相同。您是否要使表示中的零为1000
以匹配系统中其他正整数的符号位?这意味着0000
将代表其他一些负数……这很令人困惑。我们需要两个心智模型来理解有符号数和无符号数。假设我们通过将其保留为
0000
来避免零问题,但我们将第一个问题表示为1001
(甚至1000
)。这意味着如果我们做了1+1
,我们会做1001 + 1001
,这等于0010
(或1000 + 1000 = 0000
),因为我们删除了最后一个进位。因此,在您的新表示中,这意味着1+1
现在等于负数。这没有意义。
正数的符号位为 0 而负数为 1 的美妙之处在于 a) 如果您将任意两个数字相加,只要它们的答案在它们的范围内(4 位数字的范围为 -8到 7),加法将正确计算,并且 b) 我们通常的零心智模型 0000
仍然保持有符号数和无符号数之间的一致性。