
目录
[1、原码乘法(例 20):符号与数值分离](#1、原码乘法(例 20):符号与数值分离)
[2、补码乘法(例 21):符号与数值一体](#2、补码乘法(例 21):符号与数值一体)
[1. 原码乘法(例 20:x=+15,y=-13)](#1. 原码乘法(例 20:x=+15,y=-13))
[2. 补码乘法(例 21:x=-15,y=-13)](#2. 补码乘法(例 21:x=-15,y=-13))
[3. 小结②](#3. 小结②)
[2、用 "编码本质" 解释](#2、用 “编码本质” 解释)
[1、原码乘法:符号与数值 "完全分离"(先拆后算)](#1、原码乘法:符号与数值 “完全分离”(先拆后算))
[2、补码乘法:符号与数值 "部分融合"(先算后拆)](#2、补码乘法:符号与数值 “部分融合”(先算后拆))
[3、本质:都是 "符号单独处理 + 数值绝对值运算"](#3、本质:都是 “符号单独处理 + 数值绝对值运算”)
[一、都基于 "符号分离 + 绝对值运算"](#一、都基于 “符号分离 + 绝对值运算”)
[二、原码阵列乘法(例 20)](#二、原码阵列乘法(例 20))
[三、补码阵列乘法(例 21)](#三、补码阵列乘法(例 21))

1、原码乘法(例 20):符号与数值分离
- 符号处理:单独异或(0⊕1=1),结果符号位直接定正负;
- 数值运算:用绝对值的原码(无符号数)做阵列乘法,不管正负;
- 结果修正:若符号位为负,对数值部分 "算后求补"(转补码),最终拼接符号 + 补码数值。
2、补码乘法(例 21):符号与数值一体
- 符号处理:符号位参与运算(1⊕1=0),结果符号位由异或直接定,无需额外修正;
- 数值运算:用补码的 "绝对值"(算前求补器转无符号)做阵列乘法,但补码规则下,符号位已包含在数值运算中(比如负数补码的符号位 1 参与部分积相加);
- 结果修正:若符号位为正,数值部分直接用;若为负,需 "算后求补",但补码乘法的 "求补" 逻辑更贴合补码编码规则(原码求补是转补码,补码求补是转原码)。
3、小结①
- 原码:符号单独算,数值按无符号算,结果按需转补码(适配原码编码);
- 补码:符号参与算,数值按补码规则算,结果天然适配补码(符号位一体,更高效)。
原码乘法用的是 "数的绝对值(无符号数)",补码乘法用的是 "补码对应的绝对值(无符号数)"------ 两者最终都是把 "有符号数转成无符号的绝对值" 做阵列乘法,但 "转绝对值的规则" 和 "结果还原规则" 完全不同。
| 维度 | 原码阵列乘法(例 20) | 补码阵列乘法(例 21) |
|---|---|---|
| 输入数形式 | 原码(符号位 + 数值位) | 补码(符号位 + 数值位) |
| 转绝对值的规则 | 直接取数值位(原码的数值位 = 绝对值) | 对补码 "求补"(补码求补 = 原码,取数值位 = 绝对值) |
| 阵列乘法运算对象 | 原码的数值位(天然是绝对值,无符号) | 补码求补后的数值位(转成绝对值,无符号) |
| 符号处理核心 | 符号位单独异或,数值和符号完全分离 | 符号位异或定结果符号,但补码规则下符号已融入数值运算逻辑 |
| 结果还原规则 | 符号为负 → 对数值位 "求补转补码" | 符号为负 → 对数值位 "求补转补码"(但补码求补的逻辑更贴合编码) |
1. 原码乘法(例 20:x=+15,y=-13)
- x 原码:01111 → 数值位 = 1111(直接是绝对值,不用转);
- y 原码:11101 → 数值位 = 1101(直接是绝对值,不用转);
- 阵列乘法算 1111×1101=11000011(无符号);
- 符号位 0⊕1=1(负)→ 原码结果直接拼接符号位 1 + 数值位 11000011=111000011(原码),若要转补码才需求补。
2. 补码乘法(例 21:x=-15,y=-13)
- x 补码:10001 → 求补后 = 1111(补码转原码,数值位 = 绝对值);
- y 补码:10011 → 求补后 = 1101(补码转原码,数值位 = 绝对值);
- 阵列乘法算 1111×1101=11000011(无符号);
- 符号位 1⊕1=0(正)→ 直接拼接符号位 0 + 数值位 11000011=011000011(补码,正数补码 = 原码)。
3. 小结②
原码乘法的 "绝对值" 是原码数值位直接拿 ,补码乘法的 "绝对值" 是补码先求补再拿数值位 ;且原码的符号是 "外挂式" 单独算,补码的符号是 "内嵌式"(求补过程已包含符号逻辑),这是两者最本质的不同。
1、终极简化理解
不管原码还是补码乘法,阵列乘法器的 "数值运算部分" 只认 "无符号的绝对值",但:
- 原码的数值位天生就是绝对值(原码设计就是 "符号位 + 绝对值"),直接用;
- 补码的数值位不是绝对值(补码是 "符号位 + 模运算编码"),必须先 "求补转原码",才能拿到绝对值,再用。
2、用 "编码本质" 解释
-
原码的本质 :原码 = 符号位(0 正 1 负) + 绝对值的二进制(数值位)。所以对原码来说,"取数值位" 直接就是绝对值,无需额外操作.
-
补码的本质 :补码 = 符号位(0 正 1 负) + 模运算后的编码 (不是直接的绝对值)。负数补码的数值位是 "绝对值的补数"(正数补码 = 原码),所以必须**"求补" 转原码** ,才能拿到绝对值。
如何理解符号位是否参与运算?
补码乘法看似 "符号位参与运算",但本质上依然是 "符号与数值分离处理" ,只是 "分离的时机和方式" 和原码不同,核心区别在 "符号位的处理阶段":
1、原码乘法:符号与数值 "完全分离"(先拆后算)
- 分离阶段:最开始就拆成 "符号位" 和 "绝对值数值位";
- 运算阶段:符号位单独异或,数值位(绝对值)完全按无符号数算;
- 合并阶段:最后再把符号位和数值位结果拼接,若符号为负,数值位还要转补码(例 20 中,符号位 1,数值位 11000011 转补码后才是最终结果)。
2、补码乘法:符号与数值 "部分融合"(先算后拆)
- 分离阶段 :最开始不拆符号位,而是把补码整体 "求补" 转原码 (此时补码的符号位参与求补,间接转成原码的符号和数值);
- 运算阶段 :求补后的数值位(绝对值)按无符号数算,但补码的符号位异或结果直接决定最终符号(例 21 中,符号位 1⊕1=0,直接定结果为正);
- 合并阶段:符号位直接拼接数值位结果,若符号为正,数值位无需额外转换(因为补码正数的数值位 = 原码绝对值;负数才需转补码,但符号位已通过异或定好)。
3、本质:都是 "符号单独处理 + 数值绝对值运算"
不管原码还是补码乘法,阵列乘法器的数值运算部分只处理 "无符号绝对值",符号位的核心逻辑都是:
- 用异或定最终符号(正正得正、正负得负等);
- 数值部分只算绝对值相乘;
- 差异仅在 "符号位何时参与处理"(原码早拆,补码晚拆)。
4、小结③
补码乘法看似 "符号位参与运算",实际是**"先通过求补器把补码转原码(符号 + 绝对值),再用原码的逻辑算符号和数值"**,本质和原码乘法一样是 "符号与数值分离处理",只是多了 "补码转原码" 的步骤,让符号处理看起来更 "融合"。
大总结
一、都基于 "符号分离 + 绝对值运算"
不管原码还是补码乘法,阵列乘法器硬件只负责 "无符号绝对值相乘" ,符号位单独用异或定正负,本质是 "符号与数值分离处理",差异在编码适配的 "预处理" 和 "后处理"。
二、原码阵列乘法(例 20)
- 编码适配:原码 = 符号位(0/1) + 绝对值数值位(天生无符号)
- 运算流程 :拆符号 → 符号异或定结果符号 → 绝对值数值位直接进阵列乘法器 → 结果拼接符号位,若符号为负,数值位转补码(因原码负数需补码存储)
- 典型场景:无符号数乘法(符号位隐含为 0)、原码有符号数乘法(需额外符号修正)
三、补码阵列乘法(例 21)
- 编码适配:补码 = 符号位(0/1) + 模运算编码(非直接绝对值,负数需 "求补" 转原码)
- 运算流程 :补码整体求补转原码(符号位参与,间接拆出绝对值) → 符号异或定结果符号 → 绝对值数值位进阵列乘法器 → 结果拼接符号位,正数无需额外转换(补码正数 = 原码),负数按需转补码
- 典型场景:补码有符号数乘法(符号位已融入编码,修正更高效)
四、对比
| 对比项 | 原码阵列乘法 | 补码阵列乘法 |
|---|---|---|
| 数值运算对象 | 原码数值位(天生绝对值,直接用) | 补码→求补转原码后的数值位(间接拆绝对值) |
| 符号处理时机 | 最开始拆分符号位 | 补码转原码时 "隐含拆分" 符号位 |
| 结果修正复杂度 | 负数需额外转补码 | 正数无需修正,负数修正更贴合编码 |
| 硬件适配性 | 适配原码系统,逻辑简单 | 适配补码系统(CPU 常用),效率更高 |
五、一句话通透本质
原码乘法是 "符号明拆 + 绝对值直算 + 结果硬修正",
补码乘法是 "符号暗拆(借求补转原码) + 绝对值直算 + 结果软适配"
------ 两者都围绕 "绝对值相乘" 核心,差异源于编码规则(原码显式存符号,补码隐式存符号),补码更贴合硬件高效运算需求。