Skip to content

原码、反码、补码、移码

考情分析

编码转换在 408 真题中几乎每年必考,以选择题和填空题为主,考频极高。常见考查形式:给定真值求补码、由补码还原真值、补码表示范围计算、移码与补码的关系。

四种编码方式

原码

符号位 + 数值位(绝对值的二进制)。

  • 正数:符号位为 0,数值位写绝对值
  • 负数:符号位为 1,数值位写绝对值

原码有两个零+0 的原码是 0000 的原码是 100

[+5]=00000101,[5]=10000101

反码

  • 正数:与原码相同
  • 负数:符号位不变,数值位各位取反

反码也有两个零[+0]=000[0]=111

[5]=11111010

补码

  • 正数:与原码相同
  • 负数:反码 + 1(等价于:符号位不变,从最低位向左找到第一个 1,该位及其右侧不变,左侧数值位取反)

补码只有一个零[0]=000,因此 n 位补码能多表示一个 2n1

[5]=11111011

移码

移码 = 补码的符号位取反,专用于表示浮点数的阶码。

[+5]=10000101,[5]=01111011

移码的特点:移码 0 的表示唯一,真值越大移码对应的无符号整数越大,便于比较大小。

编码对照表(4 位,含符号位)

真值原码反码补码移码
+70111011101111111
+60110011001101110
+50101010101011101
+40100010001001100
+30011001100111011
+20010001000101010
+10001000100011001
+00000000000001000
-010001111
-11001111011110111
-21010110111100110
-31011110011010101
-41100101111000100
-51101101010110011
-61110100110100010
-71111100010010001
-810000000

数值范围

设机器字长为 n 位(含 1 位符号位):

编码最小值最大值
原码(2n11)+(2n11)
反码(2n11)+(2n11)
补码2n1+(2n11)
移码2n1+(2n11)

补码比原码/反码多表示一个 2n1,这是考研高频出题点。

转换流程

交互可视化

加载可视化中...

例题

例1:将 -5 转为 8 位补码

真值 X=5|5|=000001012

  1. 原码:10000101
  2. 反码:11111010(数值位取反)
  3. 补码:11111011(反码 + 1)
[5]=11111011

例2:由补码还原真值

已知 8 位补码 10110100,求真值。

符号位为 1,是负数。对补码(除符号位外)取反加 1:

1|符号位不变0110100数值位各位取反1|1001011+11|1001100

数值位 10011002=76,所以真值为 76

验证:[76]=10110100,正确。

例3:8 位补码的表示范围

n=8,补码范围为 [27, 271]=[128, +127]

原码/反码范围为 [(271), 271]=[127, +127],少了 128

快速转换技巧

补码 → 原码(快速法):从最低位向左扫描,找到第一个 1,该位及其右侧保持不变,左侧所有数值位取反。

例:补码 11001100

  • 从右向左:00 之后第一个 1 在第 3 位(从右数,1起始)
  • 第 3 位及右侧 100 不变,左侧数值位 10011 → 取反 → 01100
  • 原码:10110100,即 76

这个方法与"取反加 1"等价,但手算更快。

移码判断大小:两个浮点数阶码用移码表示,直接按无符号数比较移码大小即可,无需转换真值。

考点清单

  • 正数的原码、反码、补码三者相同
  • 原码和反码各有两个零(+00),补码只有一个零
  • n 位补码能表示 2n1,而原码和反码不能
  • 补码的最小值 100 对应 2n1,没有对应的原码/反码
  • 移码 = 补码符号位取反,专用于阶码,方便大小比较
  • 真值为 2n1 时,移码为 000(全零),这也是为什么浮点数规格化要求阶码不能全零
  • 补码求反(变号):各位取反后 +1(包括符号位),特例:2n1 无对应正数
  • 由补码到真值:正数直接读,负数再取一次补码即得原码

真题练习

相关真题(18题)

2026Q13选择题2分

算术移位运算

2025Q12选择题2分

有符号short到无符号int的符号扩展与类型转换

2024Q12选择题2分

int与short之间的截断与符号扩展

2024Q14选择题2分

数据表示范围与整数/浮点数选择

2023Q13选择题2分

负数的补码表示

2022Q13选择题2分

补码表示范围

2021Q13选择题2分

无符号与有符号整数的大小比较

2020Q13选择题2分

根据机器数判断可能的真值

2019Q13选择题2分

无符号数到有符号数的类型转换

2018Q13选择题2分

补码真值计算与减法运算

2018Q15选择题2分

小端存储方式下负数的机器代码

2018Q16选择题2分

逻辑右移与算术右移的区别

2016Q13选择题2分

有符号short到无符号short的类型转换

2015Q13选择题2分

补码表示中特定位模式的最小整数

2013Q14选择题2分

补码移位与加法组合运算

2012Q13选择题2分

无符号short到无符号int的零扩展

2011Q43综合题11分

无符号与有符号整数运算及溢出综合题

2009Q12选择题2分

int与short混合运算中的符号扩展与类型转换