Course playlist

二进制编码:原码、反码与补码

深入理解计算机如何表示和处理有符号整数的完整教程

简介

在计算机中,所有数据都是以二进制形式存储和处理的。对于有符号整数(正数和负数),计算机使用特殊的表示方法:原码、反码和补码。

为什么需要这些表示法?

计算机只能处理0和1,无法直接表示正负号。为了表示负数,计算机科学家设计了这些编码方案,使得计算机可以使用相同的电路进行加法和减法运算,大大简化了硬件设计。

本教程将详细解释这三种表示法的定义、计算方法和应用场景,帮助您深入理解计算机底层的数据表示原理。

学习提示:现代计算机几乎全部使用补码表示有符号整数,因为补码解决了原码和反码的许多问题,使运算更加高效。

原码表示法

定义:原码是最简单的有符号二进制表示法。最高位表示符号(0为正,1为负),其余位表示数值的绝对值。

原码的表示规则

  • 正数:符号位为0,后面跟着该数的二进制绝对值
  • 负数:符号位为1,后面跟着该数绝对值的二进制
  • 0的表示:有+0(0000)和-0(1000)两种形式

举例讲解(使用4位二进制)

例子1:+3 的原码表示

+3 的绝对值的二进制是 011,因为是正数,符号位为0,所以+3的原码是 0011

例子2:-3 的原码表示

-3 的绝对值的二进制是 011,因为是负数,符号位为1,所以-3的原码是 1011

例子3:+0 和 -0 的原码表示

+0的原码:0000

-0的原码:1000

原码的局限性:

  • 0有两种表示形式,增加了硬件设计的复杂性
  • 进行加减运算时,计算机需要区分符号位和数值位,电路设计复杂
  • 减法运算不能直接转换为加法运算

反码表示法

定义:反码是为了解决原码运算问题而提出的改进方案。正数的反码与原码相同;负数的反码是其绝对值的二进制按位取反(包括符号位)。

反码的计算方法

  1. 正数:与原码相同
  2. 负数:先写出该负数绝对值的原码,然后按位取反(0变1,1变0)

举例讲解(使用4位二进制)

例子1:+3 的反码表示

因为+3是正数,所以反码与原码相同:0011

例子2:-3 的反码表示

步骤1:+3的原码是0011

步骤2:按位取反:0→1, 0→1, 1→0, 1→0

结果:1100

例子3:+0 和 -0 的反码表示

+0的反码:0000

-0的反码:1111

反码的局限性:

  • 仍然存在两个0的表示(+0和-0)
  • 进行跨越0的运算时仍需要特殊处理
  • 表示范围与原码相同,没有充分利用编码空间

补码表示法

定义:补码是现代计算机中使用的有符号整数表示法。正数的补码与原码相同;负数的补码是其反码加1。

补码的计算方法

  1. 正数:与原码相同
  2. 负数:先写出该负数绝对值的原码,然后按位取反得到反码,最后加1

快速计算负数补码的方法

  • 方法1:绝对值原码 → 取反 → 加1
  • 方法2:从右向左找到第一个1,这个1及其右边的位保持不变,左边的位全部取反

举例讲解(使用4位二进制)

例子1:+3 的补码表示

因为+3是正数,所以补码与原码相同:0011

例子2:-3 的补码表示

步骤1:+3的原码是0011

步骤2:按位取反得到反码:1100

步骤3:反码加1:1100 + 1 = 1101

例子3:0 的补码表示

补码中0只有一种表示形式:

+0的补码:0000

-0的计算:0000 → 按位取反1111 → 加1得到10000(4位下溢出为0000)

结果:0的补码是0000

补码的优点:

  • 0只有一种表示形式,简化了硬件设计
  • 减法可以转换为加法运算,简化了算术单元
  • 符号位可以直接参与运算
  • 表示范围比原码和反码多一个负数(如4位补码可表示-8)

表示法比较

下面以4位二进制为例,比较三种表示法的差异:

十进制 原码 反码 补码
+7 0111 0111 0111
+6 0110 0110 0110
+5 0101 0101 0101
+4 0100 0100 0100
+3 0011 0011 0011
+2 0010 0010 0010
+1 0001 0001 0001
+0 0000 0000 0000
-0 1000 1111 0000
-1 1001 1110 1111
-2 1010 1101 1110
-3 1011 1100 1101
-4 1100 1011 1100
-5 1101 1010 1011
-6 1110 1001 1010
-7 1111 1000 1001
-8 无法表示 无法表示 1000

关键观察:

  • 补码的表示范围最大:4位二进制补码可表示-8到+7,比原码和反码(-7到+7)多一个负数
  • 0的唯一性:只有补码中0有唯一的表示形式
  • 现代标准:现代计算机几乎全部使用补码表示有符号整数
  • 对称性:原码和反码的正负数范围对称,补码的负数范围比正数范围大1

测试题

1. 在8位二进制中,十进制数 -5 的补码表示是什么?

2. 以下关于原码、反码和补码的说法,哪个是正确的?

3. 在4位二进制补码表示中,二进制数 1101 表示的十进制数是多少?

进制转换器

使用下面的工具进行原码、反码和补码的转换:

结果将显示在这里
题目 对/错/率 难度 记录 通过
姓名 分数 提交时间 操作