小熊奶糖(BearCandy)
小熊奶糖(BearCandy)
发布于 2025-12-03 / 0 阅读
0
0

原码、反码、补码详解

一、基本定义

1. 原码 (Sign-Magnitude)

  • 最高位为符号位(0正,1负)
  • 其余位为数值的绝对值
  • 表示范围(n位):-(2ⁿ⁻¹-1) ~ +(2ⁿ⁻¹-1)

2. 反码 (1's Complement)

  • 正数的反码 = 原码
  • 负数的反码 = 符号位不变,数值位取反

3. 补码 (2's Complement) ⭐

  • 正数的补码 = 原码
  • 负数的补码 = 反码 + 1

二、具体示例(8位系统)

十进制 原码 反码 补码(存储格式)
+5 0000 0101 0000 0101 0000 0101
-5 1000 0101 1111 1010 1111 1011
+0 0000 0000 0000 0000 0000 0000
-0 1000 0000 1111 1111 (不存在)
-1 1000 0001 1111 1110 1111 1111
-128 (无法表示) (无法表示) 1000 0000

三、转换方法

1. 负数原码 → 反码 → 补码

-5 为例:

原码:1000 0101
    ↓ 符号位不变,数值位取反
反码:1111 1010
    ↓ 加1
补码:1111 1011

2. 补码 → 十进制(负数)

1111 1011 为例:

方法1(推荐):
  1. 补码:1111 1011
  2. 取反(包括符号位):1000 0100
  3. 加1:1000 0101 = -5
  
方法2:
  1. 补码:1111 1011(看作无符号数=251)
  2. 减去2^8:251 - 256 = -5

四、核心特性对比

特性 原码 反码 补码
表示范围(8位) -127 ~ +127 -127 ~ +127 -128 ~ +127
零的表示 +0 和 -0 +0 和 -0 唯一(00000000)
加减法实现 需要判断符号 需循环进位 直接相加,丢弃溢出
硬件复杂度 较高
现代计算机使用 是(标准)

五、运算示例

例1:5 - 3 = 2

  5 的补码:0000 0101
 -3 的补码:1111 1101  (3→0000 0011→取反1111 1100→加11111 1101)
  
  计算:
    0000 0101
  + 1111 1101
  ------------
  1 0000 0010  ← 丢弃进位,得0000 0010 = 2

例2:-5 + 2 = -3

 -5 的补码:1111 1011
  2 的补码:0000 0010
  
  计算:
    1111 1011
  + 0000 0010
  ------------
    1111 1101  ← 这是补码
  
  转十进制:
    1111 1101 → 取反1000 0010 → 加11000 0011 = -3

六、记忆要点

  1. 正数三码合一:正数的原码、反码、补码完全相同
  2. 负数转换口诀
    原码 → 反码:符号位不变,数值位取反
    反码 → 补码:加1
    原码 → 补码:符号位不变,数值位取反再加1
    
  3. 补码优势
    • 统一了+0和-0
    • 扩展了负数表示范围(多表示一个数)
    • 减法可以用加法器实现

七、范围总结(n位系统)

编码 最小值 最大值
原码 -(2ⁿ⁻¹-1) +(2ⁿ⁻¹-1)
反码 -(2ⁿ⁻¹-1) +(2ⁿ⁻¹-1)
补码 -2ⁿ⁻¹ +(2ⁿ⁻¹-1)

8位补码:-128 ~ +127
16位补码:-32768 ~ +32767
32位补码:-2³¹ ~ +2³¹-1


这份修正后的笔记准确描述了反码的计算方式,结构也更适合学习和复习使用。


评论