反码表示法 vs 补码表示法

反码(1‘s Complement)和补码(2‘s Complement)是两种在二进制形式下表示有符号整数(正数和负数)的方法。这两种方法都允许计算机对正数和负数执行算术运算。

  • 反码: 负数是通过对正数的所有位进行取反得到的,但零的双重表示会使算术运算变得复杂。
  • 补码: 负数是通过将位取反并加 1 得到的,它只有一个零,且简化了算术运算。

!<a href="https://media.geeksforgeeks.org/wp-content/uploads/20250922165109428063/1scomplement.webp">1scomplement

什么是反码(1‘s Complement)?

二进制数的 反码 是通过 翻转所有位 得到的,即将每个 INLINECODE5d87ada7 变为 INLINECODE6e38aa13,每个 INLINECODE4a6eaaff 变为 INLINECODE9eb72006。

Let numbers be stored using 4 bits

1‘s complement of 7 (0111) is 8 (1000)
1‘s complement of 12 (1100) is 3 (0011)

反码的优势

  • 通过翻转位很容易计算。
  • 适合于具有更简单硬件设计的基本算术运算。

反码的劣势

  • 反码有两种零的表示法(0000 和 1111),这可能会导致计算过程中的复杂性。
  • 加法运算需要循环进位,这可能会使算术运算变得复杂。
  • 与补码相比,在表示负数方面效率较低。

什么是补码(2‘s Complement)?

补码是另一种在现代计算机中广泛使用的二进制数表示技术。要获得一个二进制数的补码,你需要将所有位取反(类似于反码),然后向最低有效位加 1。

在实践中,计算机并不显式计算补码;算术电路利用二进制加法自动处理负数。

二进制数的 补码 是该二进制数的反码加 1。示例:

Let numbers be stored using 4 bits

2‘s complement of 7 (0111) is 9 (1001)
2‘s complement of 12 (1100) is 4 (0100)

补码的优势

  • 只有一个零的表示,简化了算术运算。
  • 相加数字时不需要循环进位;减法可以通过加上负数来完成。
  • 负数的最高有效位为 1,提供了清晰的区分。

补码的劣势

  • 具有一个不对称的范围,多出一个负数,但这不影响精度或算术运算。

这些表示法用于有符号数。

反码补码 之间的主要区别在于,反码有两种 0(零)的表示法——00000000,即 正零 (+0),以及 11111111,即 负零 (-0);而在补码中,零只有一种表示法——00000000 (0),因为如果我们给 11111111 (-1) 加 1,我们会得到 100000000,它是九位长的。由于只允许八位,最左边的位被丢弃(或溢出),留下 00000000 (-0),这与正零相同。这就是为什么通常使用补码的原因。

另一个区别是,在使用反码相加数字时,我们首先进行二进制加法,然后加入一个循环进位值。但是,补码只有一个零值,不需要进位值。

> n 位数字的反码范围: -(2n-1-1) 到 (2n-1-1)

>

> n 位数字的补码范围: -(2n-1) 到 (2n-1-1)

反码中有 2n-1 个有效数字,补码中有 2n 个有效数字。

1‘s Complement

2‘s Complement

翻转所有位

翻转所有位 + 加 1

有两个零 (+0 和 -0)

只有一个零 (0)

需要循环进位

不需要进位

范围: −(2n-1−1) 到 (2n-1−1)

范围: -(2n-1) 到 (2n-1-1)

很少使用

现代系统的标准

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。如需转载,请注明文章出处豆丁博客和来源网址。https://shluqu.cn/43099.html
点赞
0.00 平均评分 (0% 分数) - 0