补码一位乘法公式的推导

本文深入探讨了补码一位乘法的公式及其递推式,通过证明展示了当y为非负和负数时的计算过程,并得出递推公式。此外,还附带证明了负数的补码表示等于其正数补码的相反数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、公式及其递推式

  1. 补码一位乘法公式如下:
    [x]补=x0.x1x2...xn[y]补=y0.y1y2...yn[x⋅y]补=[x]补⋅(−y0+∑i=1nyi2−i) \begin {array}{ll} [x]_{补}&=x_{0}.x_{1}x_{2}...x_{n}\\ [y]_{补}&=y_{0}.y_{1}y_{2}...y_{n}\\ [x·y]_{补}&=[x]_{补}·(-y_{0}+\sum\limits_{i=1}^{n}y_{i}2^{-i})\\ \end {array} [x][y][xy]=x0.x1x2...xn=y0.y1y2...yn=[x](y0+i=1nyi2i)
  2. 对上式进行变换:
    [x⋅y]补=[x]补⋅(−y0 +y12−1+y22−2  +...+yn2−n)=[x]补⋅[−y0  +(y1−y12−1)+(y22−1−y22−2)+...+(yn2−(n−1)−yn2−n)]=[x]补⋅[(y1−y0)   +(y2−y1)2−1   +...+ (yn−yn−1)2−(n−1)+(yn+1−yn)2−n](其中yn+1=0)=[x]补⋅∑i=1n(yi+1−yi)2−i \begin {array}{ll} [x·y]_{补}&=[x]_{补}·(-y_{0}\,+y_{1}2^{-1}\qquad\quad+y_{2}2^{-2}\qquad\qquad\ \,+...+y_{n}2^{-n})\\ &=[x]_{补}·[-y_{0}\;+(y_{1}-y_{1}2^{-1})+(y_{2}2^{-1}-y_{2}2^{-2})+...+(y_{n}2^{-(n-1)}-y_{n}2^{-n})]\\ &=[x]_{补}·[(y_1 - y_0)\ \ \,+(y_2 - y_1)2^{-1}\quad\ \ \ +...+\ (y_{n}-y_{n-1})2^{-(n-1)}+(y_{n+1}-y_{n})2^{-n}]&\qquad(其中y_{n+1}=0)\\ &=[x]_{补}·\sum\limits_{i=1}^{n}(y_{i+1}-y_{i})2^{-i} \end {array} [xy]=[x](y0+y121+y222 +...+yn2n)=[x][y0+(y1y121)+(y221y222)+...+(yn2(n1)yn2n)]=[x][(y1y0)  +(y2y1)21   +...+ (ynyn1)2(n1)+(yn+1yn)2n]=[x]i=1n(yi+1yi)2i(yn+1=0)
  3. 所以递推公式如下:
    [z0]补=0[z1]补=2−1{[z0]补+(yn+1−yn)[x]补}(其中yn+1=0)...[zi]补=2−1{[zi−1]补 +(yn−i+2−yn−i+1)[x]补}...[zn]补=2−1{[zn−1]补+(y2−y1)[x]补}[zn+1]补=[zn]补    +(y1−y0)[x]补=[x⋅y]补 \begin {array}{lll} [z_{0}]_{补}&=0\\ [z_{1}]_{补}&=2^{-1}\{[z_0]_{补}\quad+(y_{n+1}-y_{n})[x]_{补}\}&(其中y_{n+1}=0)\\ &...\\ [z_{i}]_{补}&=2^{-1}\{[z_{i-1}]_{补}\,+(y_{n-i+2}-y_{n-i+1})[x]_{补}\}\\ &...\\ [z_{n}]_{补}&=2^{-1}\{[z_{n-1}]_{补}+(y_2 - y_1)[x]_{补}\}\\ [z_{n+1}]_{补}&=\qquad[z_n]_{补}\ \ \ \,+(y_1 - y_0)[x]_{补}&=[x·y]_{补}\\ \end {array} [z0][z1][zi][zn][zn+1]=0=21{[z0]+(yn+1yn)[x]}...=21{[zi1]+(yni+2yni+1)[x]}...=21{[zn1]+(y2y1)[x]}=[zn]   +(y1y0)[x](yn+1=0)=[xy]

二、公式的证明

  1. y≥0y\geq0y0时有:(注意以下都是模为2的运算,所以2的公倍数都等价于2)
    [x⋅y]补=2+x⋅y=2n+1+x⋅y=2n+1⋅y+x⋅y(其中y=0.y1y2...yn,所以2n+1⋅y=y1y2...yn0.0)=(2n+1+x)⋅y(因为2n+1⋅y%2=0)=(2+x)⋅y=[x]补⋅y \begin {array}{rll} [x·y]_{补}&=2+x·y\\ &=2^{n+1}+x·y\\ &=2^{n+1}·y+x·y\qquad &(其中y=0.y_1y_2...y_n,所以2^{n+1}·y=y_1y_2...y_n0.0)\\ &=(2^{n+1}+x)·y &(因为2^{n+1}·y\%2=0)\\ &=(2+x)·y\\ &=[x]_{补}·y\\ \end {array} [xy]=2+xy=2n+1+xy=2n+1y+xy=(2n+1+x)y=(2+x)y=[x]y(y=0.y1y2...yn2n+1y=y1y2...yn0.0)(2n+1y%2=0)
  2. y<0y<0y<0时有:
    ∵[y]补=2+y∴y=[y]补−2=(1.y1y2...yn)−2=(0.y1y2...yn)−1∴x⋅y=x⋅(0.y1y2...yn)−x∴[x⋅y]补=[x⋅(0.y1y2...yn)−x]补=[x⋅(0.y1y2...yn)]补−[x]补(其中[−x]补=−[x]补)又∵(0.y1y2...yn)≥0,且y≥0时有[x⋅y]补=[x]补⋅y∴[x⋅(0.y1y2...yn)]补=[x]补⋅(0.y1y2...yn)∴[x⋅y]补=[x]补⋅(0.y1y2...yn)−[x]补 \begin {array} {l} \because [y]_{补}=2+y\\ \therefore y=[y]_{补}-2=(1.y_1y_2...y_n)-2=(0.y_1y_2...y_n)-1\\ \therefore x·y=x·(0.y_1y_2...y_n)-x\\ \therefore [x·y]_{补}=[x·(0.y_1y_2...y_n)-x]_{补}=[x·(0.y_1y_2...y_n)]_{补}-[x]_{补} \qquad(其中[-x]_{补}=-[x]_{补})\\ 又\because (0.y_1y_2...y_n)\geq 0,且y\geq 0时有[x·y]_{补}=[x]_{补}·y\\ \therefore [x·(0.y_1y_2...y_n)]_{补}=[x]_{补}·(0.y_1y_2...y_n)\\ \therefore [x·y]_{补}=[x]_{补}·(0.y_1y_2...y_n)-[x]_{补}\\ \end {array} [y]=2+yy=[y]2=(1.y1y2...yn)2=(0.y1y2...yn)1xy=x(0.y1y2...yn)x[xy]=[x(0.y1y2...yn)x]=[x(0.y1y2...yn)][x]([x]=[x])(0.y1y2...yn)0y0[xy]=[x]y[x(0.y1y2...yn)]=[x](0.y1y2...yn)[xy]=[x](0.y1y2...yn)[x]
  3. 综合上面1、2两点可得:
    [x⋅y]补=[x]补⋅(0.y1y2...yn)−[x]补⋅y0=[x]补⋅[−y0+(0.y1y2...yn)]=[x]补⋅(−y0+∑i=1nyi2−i)证毕. \begin {array} {rl} [x·y]_{补}&=[x]_{补}·(0.y_1y_2...y_n)-[x]_{补}·y_0\\ &=[x]_{补}·[-y_0+(0.y_1y_2...y_n)]\\ &=[x]_{补}·(-y_{0}+\sum\limits_{i=1}^{n}y_{i}2^{-i})\qquad证毕. \end {array} [xy]=[x](0.y1y2...yn)[x]y0=[x][y0+(0.y1y2...yn)]=[x](y0+i=1nyi2i).

三、附加证明

接下来来证明[−x]补=−[x]补[-x]_{补}=-[x]_{补}[x]=[x]

  1. xxx为纯小数时:
    −1≤x<0时,[−x]补=−x=−2−x=−(2+x)=−[x]补;0≤x<1时,    [−x]补=2+(−x)=−x=−[x]补。 \begin {array} {l} -1 \le x <0时,[-x]_{补}=-x=-2-x=-(2+x)=-[x]_{补};\\ 0 \le x <1时,\ \ \;[-x]_{补}=2+(-x)=-x=-[x]_{补}。\\ \end {array} 1x<0[x]=x=2x=(2+x)=[x];0x<1  [x]=2+(x)=x=[x]
  2. xxx为纯整数时:
    −2n≤x≤0时,[−x]补=−x=−2n+1−x=−(2n+1+x)=−[x]补;0≤x<2n时,   [−x]补=2n+1+(−x)=−x=−[x]补。 \begin {array} {l} -2^n \le x \le 0时,[-x]_{补}=-x=-2^{n+1}-x=-(2^{n+1}+x)=-[x]_{补};\\ 0 \le x <2^n时,\ \ \ [-x]_{补}=2^{n+1}+(-x)=-x=-[x]_{补}。\\ \end {array} 2nx0[x]=x=2n+1x=(2n+1+x)=[x];0x<2n   [x]=2n+1+(x)=x=[x]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值