1的补码表示法和2的补码表示法之间的区别28 Aug 2024 | 5 分钟阅读 要理解1的补码和2的补码,我们应该先了解补码。 补码为了进行逻辑运算和简化减法操作,数字系统通常使用补码。二进制数系统包含两种补码,即1的补码和2的补码。现在我们将分别描述每种补码。之后,我们将描述它们之间的区别。 1's 补码通过一个简单的算法,就可以轻松地将二进制数转换为1的补码。根据这个算法,如果我们翻转(或称反转)一个二进制数的所有位,生成的二进制数将成为该二进制数的1的补码。这意味着在1的补码中,我们需要将1转换为0,将0转换为1。N'用于表示一个数的1的补码。 示例:这里,我们假设数字是用4位存储的。 还有另一种找到数字1的补码的方法。我们可以使用一个公式来找到它,描述如下: N' = (2n - 1) - N 其中 N' 用于在1的补码表示法中表示-N N 用于表示正整数 n 用于表示每字(word)的位数 例如 假设我们有一个8位字,N = 6。现在N的1的补码描述如下: 通过这个公式,我们可以将给定的数字转换为1的补码。 2's 补码通过一个非常简单的算法,也可以轻松地将二进制数转换为2的补码。根据这个算法,我们可以通过先反转给定的二进制数来得到它的2的补码。之后,我们必须在最低有效位(LSB)上加1。这意味着我们必须先对一个数执行1的补码运算,然后将1加到该数上才能得到2的补码。N*用于表示一个数的2的补码。 示例:这里,我们假设数字是用4位存储的。 还有另一种找到数字2的补码的方法。我们可以使用一个公式来找到它,描述如下: N* = 2n - N 其中 N* 用于在1的补码表示法中表示-N (原文此处有误,应为2的补码表示法) N 用于表示正整数 n 用于表示每字(word)的位数 例如 假设我们有一个8位字,N = 6。现在N的1的补码描述如下: 通过这个公式,我们可以将给定的数字转换为2的补码。 1的补码和2的补码之间的区别1的补码和2的补码之间存在多种差异。我们将通过不同参数来描述它们,如下所示: 参数 | 1的补码表示法 | 2的补码表示法 |
---|
生成过程 | 通过翻转(或反转)给定二进制数的所有位,我们可以得到其1的补码。 | 通过先对给定二进制数进行1的补码运算,然后将1加到该数上,可以得到其2的补码。 | 示例 | 二进制数9(1001)的1的补码是6(0110)。 | 二进制数9(1001)的2的补码可以通过对其进行1的补码运算得到,即6(0110),然后再加1,得到7(0111)。所以9(1001)的2的补码是7(0111)。 | 使用的逻辑门 | 1的补码的实现非常简单。对于每个输入位,它基本上使用非门(NOT gate)。 | 对于每个输入位,2的补码基本上使用非门(NOT gate)和一个全加器(full adder)。 | 数字表示 | 如果我们想表示带符号的二进制数,我们可以使用1的补码。如果有一个数字0,那么它将无法以模糊表示的形式使用。 | 如果我们想表示带符号的二进制数,我们也可以使用2的补码。如果有一个数字0,那么它就可以作为所有给定数字的无歧义表示。 (原文此处有误,应为“无歧义表示”) (原文此处有误,应为“无歧义表示”) (原文此处有误,应为“无歧义表示”) | K位寄存器 | 如果有一个k位寄存器,1的补码将使用-(2(k-1) -1)来存储最小负数,以及(2(k-1) -1)来存储最大正数。 | 如果有一个k位寄存器,2的补码将使用-(2(k-1))来存储最小负数,以及(2(k-1) -1)来存储最大正数。 | 0的表示 | 在1的补码中,有两种表示数字0的方法,即+0和-0。在8位寄存器中,+0表示为00000000(正零),而-0表示为11111111(负零)。 | 在2的补码中,数字0只有一种表示方式,无论是+0还是-0。无论是负零还是正零,都可以表示为0000000(+0)。因为如果我们在11111111(-1)上加1,我们会得到00000000(+0),这与正零相同。这就是为什么数字0在2的补码中总是被视为正数。这也是为什么我们通常使用2的补码。 | 符号扩展 | 在1的补码中,符号扩展用于将给定的符号转换为任何有符号整数的其他符号。 | 2的补码中的符号扩展与1的补码中的符号扩展的工作方式相同。在这里,它也用于将给定的符号转换为任何有符号整数的其他符号。 | 循环进位(End-Around Carry-Bit) | 如果我们使用1的补码进行算术运算(加法),在这种情况下,我们将首先进行二进制加法。之后,我们将添加循环进位位。 | 如果我们使用2的补码进行算术运算(加法),在这种情况下,将不会发生循环进位位的加法,因为2的补码对于零只有一个值。2的补码会忽略这种加法。 | 操作的便捷性 | 1的补码总是需要添加循环进位位。因此,与2的补码算术运算相比,1的补码算术运算更难。 | 2的补码不需要添加循环进位位。因此,与1的补码算术运算相比,2的补码算术运算更容易。 |
|