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

文章详细介绍了如何用二进制补码表示整数,包括无符号数和有符号数的表示方法。接着,文章阐述了无符号数和有符号数的乘法数学表达式,并提供了乘法竖式的计算过程,特别讨论了不同类型的数相乘时的处理方式,如无符号数与无符号数、有符号数与无符号数以及有符号数与有符号数的乘法。

数值的数学表达

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

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

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

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

乘法的数学表达

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

  1. 无符号数 AAA 和无符号数 BBB 相乘:
    AB=(∑i=0n−1ai2i)(∑j=0n−1bj2j)=∑i=0n−1∑j=0n−1aibj2i+jAB=(\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. 有符号数 AAA 和无符号数 BBB 相乘:
    AB=(−an−12n−1+∑i=0n−2ai2i)(∑j=0n−1bj2j)=−an−1∑j=0n−1bj2j+n−1+∑i=0n−2∑j=0n−1aibj2i+jAB=(-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. 无符号数 AAA 和有符号数 BBB 相乘:
    AB=(∑i=0n−1ai2i)(−bn−12n−1+∑j=0n−2bj2j)=−bn−1∑i=0n−1ai2i+n−1+∑i=0n−1∑j=0n−2aibj2i+jAB=(\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. 有符号数 AAA 和有符号数 BBB 相乘:
    AB=(−an−12n−1+∑i=0n−2ai2i)(−bn−12n−1+∑j=0n−2bj2j)=an−1bn−122n−2+∑i=0n−2∑j=0n−2aibj2i+j−(an−1∑j=0n−2bj2j+n−1+bn−1∑i=0n−2ai2i+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 数为示例演示乘法竖式的计算。

无符号数 AAA 和无符号数 BBB 相乘

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

有符号数 AAA 和无符号数 BBB 相乘

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

无符号数 AAA 和有符号数 BBB 相乘

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

有符号数 AAA 和有符号数 BBB 相乘

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

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值