一、公式及其递推式
- 补码一位乘法公式如下:
[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]补[x⋅y]补=x0.x1x2...xn=y0.y1y2...yn=[x]补⋅(−y0+i=1∑nyi2−i) - 对上式进行变换:
[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} [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]=[x]补⋅i=1∑n(yi+1−yi)2−i(其中yn+1=0) - 所以递推公式如下:
[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=2−1{[z0]补+(yn+1−yn)[x]补}...=2−1{[zi−1]补+(yn−i+2−yn−i+1)[x]补}...=2−1{[zn−1]补+(y2−y1)[x]补}=[zn]补 +(y1−y0)[x]补(其中yn+1=0)=[x⋅y]补
二、公式的证明
- 当y≥0y\geq0y≥0时有:(注意以下都是模为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} [x⋅y]补=2+x⋅y=2n+1+x⋅y=2n+1⋅y+x⋅y=(2n+1+x)⋅y=(2+x)⋅y=[x]补⋅y(其中y=0.y1y2...yn,所以2n+1⋅y=y1y2...yn0.0)(因为2n+1⋅y%2=0) - 当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+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]补 - 综合上面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} [x⋅y]补=[x]补⋅(0.y1y2...yn)−[x]补⋅y0=[x]补⋅[−y0+(0.y1y2...yn)]=[x]补⋅(−y0+i=1∑nyi2−i)证毕.
三、附加证明
接下来来证明[−x]补=−[x]补[-x]_{补}=-[x]_{补}[−x]补=−[x]补:
- 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} −1≤x<0时,[−x]补=−x=−2−x=−(2+x)=−[x]补;0≤x<1时, [−x]补=2+(−x)=−x=−[x]补。 - 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} −2n≤x≤0时,[−x]补=−x=−2n+1−x=−(2n+1+x)=−[x]补;0≤x<2n时, [−x]补=2n+1+(−x)=−x=−[x]补。