黑马程序员技术交流社区

标题: 负数的正码求反码没搞懂啊 [打印本页]

作者: 喝咖啡的玉米    时间: 2016-9-14 12:28
标题: 负数的正码求反码没搞懂啊
{:2_30:}头疼
作者: 小菜白白白    时间: 2016-9-14 16:26
最高位不变 其他位取反就行了
作者: HMSK    时间: 2016-9-14 16:42
负数的反码=负数的源码取反+1(不包括符号位)
byte b = (byte)210;     
  System.out.println(b);

  210的二进制:
   补码:
   00000000  00000000  00000000 11010010
  
   (byte)210:砍掉前面24位,只要后8位
    补码: 11010010

    为了查看11010010的数值,补码转换成原码:
      11010010 //二进制的减法借一当二
                      //二进制的加法逢二进一
      
      11010010
   -         1
   --------------
      11010001   取反
  ---------------
      1 0 1 0 1 1 1 0
      -  32   8 4 2=-46
作者: Anand    时间: 2016-9-14 20:22
HMSK 发表于 2016-9-14 16:42
负数的反码=负数的源码取反+1(不包括符号位)
byte b = (byte)210;     
  System.out.println(b);

你说的是补码吧,反码不需要加1的
作者: zhanghui123    时间: 2016-9-14 20:48
本帖最后由 zhanghui123 于 2016-9-14 20:56 编辑

正数的原码反码补码一样,就是一个呗。负数的原码转换反码(反之一样)
就是最高位(符号位不变),其他的0变1,1变0.
比如 1  0011101 的反码就是 1  1100010
原码转补码可以快速转换:就是从右往左数第一个1开始,前面的0变1,1变0 就可以啦
比如:1  0011010的补码就是  1  1100110      符号位不变

作者: 江月念华    时间: 2016-9-14 21:01
不要紧,代码会用就可以
作者: Jerry007    时间: 2016-9-14 21:06
正数的原码反码补码都是自己本身;
负数的反码是在原码的基础上取反,即1变0,0变1(但是最高位不变),补码是在反码的基础上+1.
比如十进制-65的二进制是 1(最高位) 100 0001  ,这是负数-65的原码.
原码 1(最高位) 100 0001
反码 1            011 1110   (原码的基础上取反,即1变0,0变1(但是最高位不变))
+                              1
补码 1            011 1111   (补码是在反码的基础上+1)

所以-65补码就是1011 1111

我没说错吧,今天刚学,呵呵
作者: 你微笑时很美丶    时间: 2016-9-14 21:08
这个不是重点
作者: haoge349    时间: 2016-9-14 21:27
反码规定就是除了符号位,其他位取反,没什么理由为什么
作者: HMSK    时间: 2016-9-14 22:11
Anand 发表于 2016-9-14 20:22
你说的是补码吧,反码不需要加1的

是的
作者: 肖小龙    时间: 2016-9-14 22:49
本帖最后由 肖小龙 于 2016-9-14 22:57 编辑

负数的反码是对其原码逐位取反,但符号位除外   有个快速的的方法是  负数从右边找第一个1,住左边每位按位取反,就是原码与补码 -60的二进制是‭ 1 00111100‬                                    快速转换法:1 00111100‬
-60反码           1 11000011                                                          1 11000100
-60补码           1 11000100                          

作者: 迷路兵    时间: 2016-9-14 23:59
这个了解一下就行了
作者: juestdoit    时间: 2016-9-15 00:33
告诉你个简单的方法
原码  补码相互转换  
从左向右除符号位(最高位)外,0变1,1变0,遇到最后一个1时结束
例如  :10011110    11100010
作者: SunCowbee    时间: 2016-9-15 01:40
也是跟着学习了




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