原码、反码、补码:概念解析与记忆方法
适合读者:软考中级备考同学
阅读时间:3分钟
内容:定义、对比表格、记忆口诀、经典例题
1. 为什么需要这三种编码?
计算机内部使用二进制,并且只能做加法运算。为了表示负数并把减法转化为加法,人们设计了三种编码方式:原码、反码、补码。移码则主要用于浮点数的阶码表示。
理解这三种编码,是学习计算机组成原理的基础,也是软考选择题的高频考点。
2. 原码(Sign-Magnitude)
定义
- 正数:符号位为0,其余位表示数值的绝对值
- 负数:符号位为1,其余位表示数值的绝对值
示例(4位机器字长)
| 真值 | 原码 |
|---|---|
| +5 | 0 101 |
| -5 | 1 101 |
优点:直观,容易理解。
缺点:0有两种表示(+0=0000,-0=1000);加减运算需要单独处理符号位,硬件实现复杂。
用途:通常用于人类阅读,计算机内部不直接使用。
3. 反码(Ones‘ Complement)
定义
- 正数:与原码相同
- 负数:符号位不变,数值位按位取反(0变1,1变0)
示例(4位)
| 真值 | 原码 | 反码 |
|---|---|---|
| +5 | 0101 | 0101 |
| -5 | 1101 | 1010 |
缺点:同样存在+0和-0两种表示。反码很少直接用于计算,主要是求补码的中间步骤。
4. 补码(Two’s Complement)
定义
- 正数:与原码相同
- 负数:反码加1
示例(4位)
| 真值 | 原码 | 反码 | 补码 |
|---|---|---|---|
| +5 | 0101 | 0101 | 0101 |
| -5 | 1101 | 1010 | 1011 |
重要性质
- 0只有一种表示:0000
- 4位补码可以表示-8(1000),比原码多表示一个负数
- 减法可以转化为加法:
5 - 3 = 5 + (-3的补码),直接相加即可得到正确结果
用途:计算机内部整数运算全部使用补码。
5. 移码(Excess-K / Biased Code)
定义
通常定义为:移码 = 补码 + 2^(n-1)(n为机器字长),或者等价地“补码的符号位取反”。
示例(4位)
| 真值 | 补码 | 移码 |
|---|---|---|
| +5 | 0101 | 1101 |
| -5 | 1011 | 0011 |
用途:表示浮点数的阶码(指数部分)。两个移码可以直接比较大小,无需考虑符号位。
6. 一张对比表(4位机器,建议截图保存)
| 真值 | 原码 | 反码 | 补码 | 移码 |
|---|---|---|---|---|
| +5 | 0101 | 0101 | 0101 | 1101 |
| -5 | 1101 | 1010 | 1011 | 0011 |
| +0 | 0000 | 0000 | 0000 | 1000 |
| -0 | 1000 | 1111 | 0000 | 1000 |
观察:
- 补码没有-0,因此能多表示一个负数(4位时为-8)
- 移码符号位与补码相反
7. 记忆口诀
正数三码都一样,负数反码加一得补码。
移码就是补码符号反,浮点阶码常用它。
建议抄在笔记本上,考前浏览一遍。
8. 经典例题(软考常见题型)
题目:若机器字长为8位,求-1的补码。
解题步骤
- 1的二进制:00000001
- -1的原码:10000001
- -1的反码:11111110
- -1的补码:11111111
答案:11111111
同类练习题:
8位补码能表示的最小负数是?
A. -127 B. -128 C. -0 D. -255
9. 给备考同学的一句话
不需要完全理解“为什么补码等于反码加1”,考试只需要会计算:负数补码 = 符号位不变,数值位取反,再加1。计算熟练即可得分。
🔔本专栏日更2篇,点击头像 → 专栏《软考中级高频考点》订阅,第一时间接收新内容
#软考中级 #软件设计师 #原码反码补码 #计算机系统知识
