黑马程序员技术交流社区

标题: 关于二进制负数的补码公式证明 [打印本页]

作者: 那一剑的风情    时间: 2013-10-14 17:39
标题: 关于二进制负数的补码公式证明
本帖最后由 那一剑的风情 于 2013-10-28 08:55 编辑

刚开始自学毕老师的java基础视频,看到关于负数的原码、反码、补码时有点迷糊。上网查了下资料,自己总结推导了一下负数的补码公式。如有不对的地方请大家指出,谢谢。
       已知:1.计算机中的数据均以二进制的补码形式进行存储、运算。最高位为符号位,0为正,1为负
                 2.正数的原码、反码、补码均相同;
                    负数的原码为最高位为1,其余位与其绝对值的原码相同;
                    负数的反码为最高位为1不变,其余位的原码取反;
                    负数的补码为 负数的反码加1(要证明这个)
          定义两个n位二进制正整数 x, y         
     证明:  (-x)补=   ( -x )反+1         

      证明如下:  引入补数的概念:对于n位二进制正整数,
                         .若a+b=2^n,则a,b 互为补数;
                             对于减法运算       y-x=y+(-x)
                                          =y-(2^n-x(补))   ;x(补)表示补数,并非补码
                                          =y+x(补)-2^n
                           可以发现2^n最高位为1且溢位,其他位均为0.对最后的结果不会产生影响
                           得到:y+(-x)=y+x(补)
                           这时可以看出x(补)的原码即是-x在参与运算时显示的补码。由此可见补码是果而不是因,是人为定义的
                                    (-x)补=x(补)=2^n-x=2^n-1-x+1
                                 2^n-1-x即是对x进行取反操作 即      2^n-1-x=(-x ) 反
                          所以得到 :  (-x)补=(-x ) 反+1

作者: 呆萌    时间: 2013-10-17 02:59

{:soso_e151:}

作者: To    时间: 2013-10-17 13:51
楼主你好,如果问题已解决请将帖子状态修改为提问结束,如果未解决请继续提问,谢谢合作
如果不会修改请看解释帖:http://bbs.itheima.com/thread-89313-1-1.html




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2