Answers:
当所讨论的两个实体具有相同的“单位”和相同的“宽度”时,二进制补码才有意义。宽度是指,如果要添加N位和M位(其中N和M不同),则最好不要使用二进制补码。对于浮点数,我们有单位问题:如果指数不同,那么我们就在思维上移动了一个尾数,现在我们遇到了与以前相同的问题(宽度)。
对于指数位,通过使用偏置而不是符号+幅值,我们可以再获得一个值(否则,我们将获得+0和-0)。在这里,二元补码在乘或除数时是有意义的(因为此后我们要对指数进行加法或减法),但在加法或减法时意义不大。
编辑:评论者指出,可以使用符号扩展名添加长度不同的二进制补码整数。检测溢出也存在一些问题,但这也是可以解决的。总之,如果您足够小心的话,可以使用二进制补码。(您还需要处理乘法和除法。)
但是为什么浮点数需要符号位
错误的假设。没必要 我很确定我已经遇到了使用2补码作为尾数的浮点格式,但是我必须要找出名称。
我并不是数值分析方面的专家,但我知道对他们来说零符号很重要。它可能比人的补语容易操纵。这可能是选择IEEE-754的标准。
还有为什么指数位使用偏差而不是有符号的幅度表示
同样,这是不需要的,有些则做了不同的事情。
它是一种表示形式,对于在指数上完成的一组操作更易于执行硬件实现(这里不希望有-0的表示形式)。
该选择的结果之一是,如果您不关心NaN,则可以使用有符号整数比较来比较FP数,这也许是某些条件的标准(事实上NaN需要特殊处理,这使我怀疑它不是适用于IEEE-754)。
IEEE 754使用符号/幅度,而不是二进制补码或一个补码。
二进制补码具有正负范围不相同的缺点。如果所有位模式均有效,则您将拥有数字x,因此无法轻松计算-x。那很糟。另一种选择是存在无效的位模式,这也是不好的。在IEEE 754中,没有64位或32位浮点的无效位模式,因此您不必担心。
一个补码会使乘/除变得更复杂(对于带符号的幅度,您只需对符号进行异或运算,并将尾数视为无符号数字)。对于加法和减法,我真的不想考虑加法和减法,这会使我的头部受伤。
我认为了解浮点计算产生的是近似值,而不是精确值很重要。也就是说,如果浮点计算得出的编码值为X,则表示理论上理想的值,该值几乎可以肯定不是X,而是在[X .. X + e){机器epsilon”,即X和X + e}之间没有浮点数。更具体地,浮点零表示理想数字,该理想数字可能不完全为零,但是太小而无法用非零浮点编码值表示。
鉴于此,使用正负号表示是一种允许编码准确“记住” 理想值在零的哪一侧(正值或负值)的方法。这对于某些复杂的(在“ a + bi”意义上的)计算非常关键-复杂->复杂函数通常是“多值”的,因此对于正确的计算,至关重要的是要注意“分支切割”的位置。有符号的零在某种意义上标记了这些分支切割的位置-在正侧进行的计算将与负侧进行的计算不同。