黑马程序员技术交流社区

标题: Java中取反是怎么算的? [打印本页]

作者: hi2hcs    时间: 2014-8-29 00:37
标题: Java中取反是怎么算的?
例:Java 中对5取反,5用二进制int表示是0000 0000 0000 0000 0000 0000 0000 0101,取反后不就是1111 1111 1111 1111 1111 1111 1111 1010,而实际上对5取反是-6,我这是哪里理解出问题了,谢谢!
作者: 陈永赛    时间: 2014-8-29 00:59
在计算机里面,数字取反的话,需要把进制转换成二进制后,把“0”和”1“互换后,再加上”1“(在末尾处)。
示例:  
        5 = ···· 0000 0101

取反:     ···· 1111 1010
          +  ···· 0000 0001
—————————
作者: 陈永赛    时间: 2014-8-29 01:01
  在计算机里面,数字取反的话,需要把进制转换成二进制后,把“0”和”1“互换后,再加上”1“(在末尾处)。
示例:  
        5 = ···· 0000 0101

取反:     ···· 1111 1010
          +  ···· 0000 0001
         ————————
      -5 = 1·····1111 1011
作者: 小子考驾照    时间: 2014-8-29 01:03
这个问题毕老师说的很清楚了啊
作者: 谢建平    时间: 2014-8-29 01:45
1111 1111 1111 1111 1111 1111 1111 1010     这个是在计算机里就是-6  吧      在计算机里存储的都是补码
作者: abc83983682    时间: 2014-8-29 07:10
最后要加1
作者: cs8630323    时间: 2014-8-29 18:08
本帖最后由 cs8630323 于 2014-8-29 18:12 编辑
陈永赛 发表于 2014-8-29 01:01
在计算机里面,数字取反的话,需要把进制转换成二进制后,把“0”和”1“互换后,再加上”1“(在末尾处 ...

错了,你这个是求补码不是取反,搞清楚什么是原码补码反码。。。
取反有个运算符  ~,5取反就~5。5的二进,0...000101,取反1...111010, 就是-6.

作者: 陈永赛    时间: 2014-8-30 16:47
cs8630323 发表于 2014-8-29 18:08
错了,你这个是求补码不是取反,搞清楚什么是原码补码反码。。。
取反有个运算符  ~,5取反就~5。5的二进, ...

了解,楼主不是不明白,为什么5取反码是-6嘛?可能是楼主以为取反就是正负互换,其实
原码 =  -(反码 + 补码)
  5   =  -(  -6  + 1)  ==>  原码(5)=反码(-6)
作者: 李天富    时间: 2014-8-30 17:00
取反之后要加1才是所求负数。
作者: 萌大大    时间: 2017-7-15 10:14
开始自学Java,发现真的有人和我一样问题




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