黑马程序员技术交流社区

标题: 关于原码反码与补码 [打印本页]

作者: 小峰Raul    时间: 2015-5-22 21:50
标题: 关于原码反码与补码
今天学习了一些关于原码 反码以及补码的问题,由原码求反码 补码没啥问题
但是负数的补码求反码我还是有一点不明白 希望大神解答
作者: tanzhixue    时间: 2015-5-22 21:57
负数补码取反码 -1就行了啊
作者: BlueSun    时间: 2015-5-22 22:01
本帖最后由 BlueSun 于 2015-5-22 22:07 编辑

取反+1
具体来说就是先写出反码(把其原码除符号位外的各位先求其反),再在最后位+1例如
                原码           反码              补码
       47     00101111     00101111   00101111(正数补码和原码、反码相同,)
     -47    10101111     11010000   11010001(负数补码是在反码上加1)

作者: BlueSun    时间: 2015-5-22 22:03
负数的补码是把其原码除符号位外的各位先求其反码,然后在最低位加1
作者: 小峰Raul    时间: 2015-5-22 22:17
tanzhixue 发表于 2015-5-22 21:57
负数补码取反码 -1就行了啊

嗯嗯 谢谢
作者: 小峰Raul    时间: 2015-5-22 22:19
BlueSun 发表于 2015-5-22 22:01
取反+1
具体来说就是先写出反码(把其原码除符号位外的各位先求其反),再在最后位+1例如
                原 ...

谢谢大神
作者: 小峰Raul    时间: 2015-5-22 22:20
BlueSun 发表于 2015-5-22 22:03
负数的补码是把其原码除符号位外的各位先求其反码,然后在最低位加1

嗯嗯 谢谢了
作者: niuapp    时间: 2015-5-22 22:20
负数的 原码转补码,补码转原码,都是      符号位不变,其它位 取反加一
作者: !85684009ex    时间: 2015-5-22 22:21
膜拜大神!你们太厉害了!
作者: 小峰Raul    时间: 2015-5-22 22:21
BlueSun 发表于 2015-5-22 22:03
负数的补码是把其原码除符号位外的各位先求其反码,然后在最低位加1

嗯嗯 谢谢了
作者: 小麻    时间: 2015-5-22 22:22
除最高位不变外,其余数值位都0变1  1变0,得到反码 然后反码加1  就是补码
作者: 马鹏涛    时间: 2015-5-22 22:31
膜拜大神
作者: 破烂小白    时间: 2015-5-22 22:50
反码-1就是了
作者: 执剑、砍人    时间: 2015-5-22 22:51
原码:有符号数据的最基本表示形式。最高位是符号位,其他位是数值位。  0表示正数,1表示负数。
反码:
        正数的反码和原码相同。
        负数的反码和原码不同:
                 规则是:符号位不变,数值位取反,0变1,1变0.
补码:
        正数的补码和原码相同。
        负数的补码和原码不同:
                规则是:反码+1
总结:
        正数的原码,反码,补码都一样。
        负数的不一样。

        注意:
                Java中只有加法,减去一个数字,等于加上这个数字的负数形式。
                记忆:计算中存数的数据都是以补码形式存的。


负数的补码求反码就就是减1,如-78的补码求反码:
  10110010
-             1
——————
  10110001
因为最右边的0减1不够,像右边借一个,就是这样。


作者: 鸣人H    时间: 2015-5-22 22:53
反码求补码 用反码+1就可以  补码求反码的话 加上一个-1就好了
作者: hieiyukina    时间: 2015-5-22 23:02
学习一下 谢谢各位分享




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