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有两种表示形式,增加了硬件设计的复杂性
- 进行加减运算时,计算机需要区分符号位和数值位,电路设计复杂
- 减法运算不能直接转换为加法运算
反码表示法
定义:反码是为了解决原码运算问题而提出的改进方案。正数的反码与原码相同;负数的反码是其绝对值的二进制按位取反(包括符号位)。
反码的计算方法
- 正数:与原码相同
- 负数:先写出该负数绝对值的原码,然后按位取反(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
快速计算负数补码的方法
- 方法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 表示的十进制数是多少?
进制转换器
使用下面的工具进行原码、反码和补码的转换:
| 题目 | 对/错/率 | 难度 | 记录 | 通过 |
|---|
| 姓名 | 分数 | 提交时间 | 操作 |
|---|