对二求补器
对二求补器即对二进制求补器
传统的对负数求补方式为 按位取反,使用加法模块加1 这种电路比较笨重,因为用到了先行进位加法器 CLA
无需 CLA 的求补电路图:
求补方式
给定二进制序列 anan-1······a0 从最右端 a0 开始向左遍历,找到 第一个 '1' 对应二进制序列的 ai ,将an ~ ai+1 按位取反即可得到补码
如:1010,第三位后不变,第一、二位取反,得到 0110 (注该数为负数,隐含符号位 1)
电路图说明
输入 E 代表是否要求补,即该数为正数还是负数,E 为 1 代表求补,E 为 0 代表不求补
C--1 恒为 0,用于寻找 第一个 '1' 在哪
寻找第一个1的方式(Ci = ai + Ci-1):
- 如果 ai 不是 第一个1,ai 为 0,Ci-1 必然为 0,传给后一个位 ai+1 的 Ci 为 ai + Ci-1 是 0
- 如果 ai 是 第一个1,ai 为 1,Ci-1 必然为 0,传给后一个位 ai+1 的 Ci 为 ai + Ci-1 是 1
- 对于 第一个1 ai 前的 anan-1······ai+1 ,它们接受的 C值 与传出的 C值 都为 1
取反方式(ai* = ai ⊕ (E · Ci-1) ):
-
当 E 为 0 时, E · Ci-1 必为 0,ai ⊕ (E · Ci-1) 必为 ai ,原样输出
-
当 E 为 1 时, E · Ci-1 必为 Ci-1
- 当 Ci-1 为 0,原样输出
- 当 Ci-1 为 1,取反输出
而在上面我们已经讨论过 Ci-1 的取值 对于 第一个1 以及它后面的数,C值均为 0 (原样输出) 对于 第一个1 以及它前面的数,C值均为 1 (取反输出)