有符号和无符号整数乘法竖式图示

数值的数学表达

我们知道,在硬件中使用二进制补码表示整数,即对于一个 n n n-bits 的整数 X X X,其二进制补码表示为:

[ X ] 补 = x n − 1 x n − 2 . . . x 0 [X]_补=x_{n-1}x_{n-2}...x_{0} [X]=xn1xn2...x0

其中, x m x_{m} xm 表示补码第 m m m-bit 的值,取值只能为0或1。
我们假设在此文中,对于有符号数,最高位 x n − 1 x_{n-1} xn1 为符号位,对于无符号数,没有符号位,即最高位 x n − 1 x_{n-1} xn1 为正常数值。

因此,在无符号数的情况下, X = ∑ i = 0 n − 1 x i 2 i X=\sum_{i=0}^{n-1}x_{i}2^{i} X=i=0n1xi2i
在有符号数的情况下, X = − x n − 1 2 n − 1 + ∑ i = 0 n − 2 x i 2 i X=-x_{n-1}2^{n-1}+\sum_{i=0}^{n-2}x_{i}2^{i} X=xn12n1+i=0n2xi2i

乘法的数学表达

在前节的基础上可以进一步推导乘法的数学表达:

  1. 无符号数 A A A 和无符号数 B B B 相乘:
    A B = ( ∑ i = 0 n − 1 a i 2 i ) ( ∑ j = 0 n − 1 b j 2 j ) = ∑ i = 0 n − 1 ∑ j = 0 n − 1 a i b j 2 i + j AB=(\sum_{i=0}^{n-1}a_{i}2^{i})(\sum_{j=0}^{n-1}b_{j}2^{j})=\sum_{i=0}^{n-1}\sum_{j=0}^{n-1}a_{i}b_{j}2^{i+j} AB=(i=0n1ai2i)(j=0n1bj2j)=i=0n1j=0n1aibj2i+j
  2. 有符号数 A A A 和无符号数 B B B 相乘:
    A B = ( − a n − 1 2 n − 1 + ∑ i = 0 n − 2 a i 2 i ) ( ∑ j = 0 n − 1 b j 2 j ) = − a n − 1 ∑ j = 0 n − 1 b j 2 j + n − 1 + ∑ i = 0 n − 2 ∑ j = 0 n − 1 a i b j 2 i + j AB=(-a_{n-1}2^{n-1}+\sum_{i=0}^{n-2}a_{i}2^{i})(\sum_{j=0}^{n-1}b_{j}2^{j})=-a_{n-1}\sum_{j=0}^{n-1}b_{j}2^{j+n-1}+\sum_{i=0}^{n-2}\sum_{j=0}^{n-1}a_{i}b_{j}2^{i+j} AB=(an12n1+i=0n2ai2i)(j=0n1bj2j)=an1j=0n1bj2j+n1+i=0n2j=0n1aibj2i+j
  3. 无符号数 A A A 和有符号数 B B B 相乘:
    A B = ( ∑ i = 0 n − 1 a i 2 i ) ( − b n − 1 2 n − 1 + ∑ j = 0 n − 2 b j 2 j ) = − b n − 1 ∑ i = 0 n − 1 a i 2 i + n − 1 + ∑ i = 0 n − 1 ∑ j = 0 n − 2 a i b j 2 i + j AB=(\sum_{i=0}^{n-1}a_{i}2^{i})(-b_{n-1}2^{n-1}+\sum_{j=0}^{n-2}b_{j}2^{j})=-b_{n-1}\sum_{i=0}^{n-1}a_{i}2^{i+n-1}+\sum_{i=0}^{n-1}\sum_{j=0}^{n-2}a_{i}b_{j}2^{i+j} AB=(i=0n1ai2i)(bn12n1+j=0n2bj2j)=bn1i=0n1ai2i+n1+i=0n1j=0n2aibj2i+j
  4. 有符号数 A A A 和有符号数 B B B 相乘:
    A B = ( − a n − 1 2 n − 1 + ∑ i = 0 n − 2 a i 2 i ) ( − b n − 1 2 n − 1 + ∑ j = 0 n − 2 b j 2 j ) = a n − 1 b n − 1 2 2 n − 2 + ∑ i = 0 n − 2 ∑ j = 0 n − 2 a i b j 2 i + j − ( a n − 1 ∑ j = 0 n − 2 b j 2 j + n − 1 + b n − 1 ∑ i = 0 n − 2 a i 2 i + n − 1 ) AB=(-a_{n-1}2^{n-1}+\sum_{i=0}^{n-2}a_{i}2^{i})(-b_{n-1}2^{n-1}+\sum_{j=0}^{n-2}b_{j}2^{j})=a_{n-1}b_{n-1}2^{2n-2}+\sum_{i=0}^{n-2}\sum_{j=0}^{n-2}a_{i}b_{j}2^{i+j}-(a_{n-1}\sum_{j=0}^{n-2}b_{j}2^{j+n-1}+b_{n-1}\sum_{i=0}^{n-2}a_{i}2^{i+n-1}) AB=(an12n1+i=0n2ai2i)(bn12n1+j=0n2bj2j)=an1bn122n2+i=0n2j=0n2aibj2i+j(an1j=0n2bj2j+n1+bn1i=0n2ai2i+n1)

乘法竖式的计算

以下均以 4-bits 数为示例演示乘法竖式的计算。

无符号数 A A A 和无符号数 B B B 相乘

在这里插入图片描述
无符号数和无符号数的乘法直接相乘即可,高位补0。

有符号数 A A A 和无符号数 B B B 相乘

在这里为了区分符号位,令 A A A 的符号位为 s a \mathbf{sa} sa
第一步:根据公式,与符号位相乘的结果需要取负值。
在这里插入图片描述
第二步: − s a ⋅ b x , x = 0 , 1 , 2 , 3 \mathbf{-sa·bx, x=0,1,2,3} sabx,x=0,1,2,3 取值只能为 0或 -1,因此其可以等效为 n ′ b 1...1 + 1 ′ b s a ⋅ b x ‾ \mathbf{n'b1...1+1'b\overline{sa·bx}} nb1...1+1bsabx
在这里插入图片描述
第三步:将多余的 1 提前消去,简化运算。
在这里插入图片描述

无符号数 A A A 和有符号数 B B B 相乘

在这里插入图片描述
与第二种情况相似,可以对这种情况化简如下: 在这里插入图片描述

有符号数 A A A 和有符号数 B B B 相乘

此时根据公式展开后的竖式如下:
在这里插入图片描述
对竖式中的负数进行替换:
在这里插入图片描述
对替换后公式中的1进行合并:
在这里插入图片描述
最后,得到化简后的竖式:
在这里插入图片描述
当然,涉及到有符号数的乘法结果的符号位也可以通过乘数的符号位直接求得:
在这里插入图片描述

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值