补码加法与乘法正确性的简明证明
前置:
原码:k位⼆进制数中,后k-1位⽤于记录数值⼤⼩,若为正数,第k位为0,反之为1。
补码:正数的补码与原码相同,负数的补码由将该数后k-1位按位取反后加1得到。
4位⼆进制中,0有0000(+0)或1000(-0)之分,但补码均为0000。以下略去与0相关的部分。
正⽂:
在计算机中,数据以补码的形式参与运算,符号位⽆特判,运算遵循⼆进制正整数运算法则。但由于位数的有限性,计算机⽆法表⽰⼤于k 位上的“1”,那么实际运算过程中相当于任意时刻对2k取正余数(mod 2k)。
需要证明的命题分别是:
①[a]补+[b]补=[a+b]补
②[a]×[b]补=[a×b]补
*这⾥的a与b都是数本⾝,不是原码或补码。可⽤带符号⼗进制来理解。 a,b不为0,且在k位表⽰中合法。结果也需合法。
对取补码的过程,有
[a]补= [a]原(a≥0) [a]补=[2k-1 + (2k-1 -1)+a+1]原=[2k + a]原 (a<0,对号⼊座)
对命题①:
1. a>0,b>0 → a+b>0,得证
2. a>0,b<0 → [a]补+[b]补= 2k + (a+b) 若(a+b)<0 得证;若 (a+b)>0 ,mod 2k后得a+b,得证。
3. a<0,b<0 → [a]补+[b]补= 2k+1 + (a+b) 由a、b数据范围知,求余后结果为 2k + (a+b) ,得证。
对命题②:
1. a>0,b>0 → a×b>0,得证
负数二进制补码运算法则 2. a>0,b<0 → [a]补×[b]补=a·(2k+b)=a×b + a×2k 求余后得 a×b + 2k,得证
3. a<0,b<0 → [a]补×[b]补=(2k+a)·(2k+b)= a×b+(a+b+2k)×2k+1,求余后结果为a×b,得证
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论