A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 那一剑的风情 中级黑马   /  2013-10-14 17:39  /  2813 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 那一剑的风情 于 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

评分

参与人数 1技术分 +1 收起 理由
李江 + 1

查看全部评分

3 个回复

倒序浏览

{:soso_e151:}

点评

To
封ID  发表于 2013-10-17 13:52
回复 使用道具 举报
To 金牌黑马 2013-10-17 13:51:58
藤椅
楼主你好,如果问题已解决请将帖子状态修改为提问结束,如果未解决请继续提问,谢谢合作
如果不会修改请看解释帖:http://bbs.itheima.com/thread-89313-1-1.html
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马