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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

{:2_30:}头疼

14 个回复

倒序浏览
最高位不变 其他位取反就行了
回复 使用道具 举报
负数的反码=负数的源码取反+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

点评

嗯,会这个就行  发表于 2016-9-14 22:35
回复 使用道具 举报
HMSK 发表于 2016-9-14 16:42
负数的反码=负数的源码取反+1(不包括符号位)
byte b = (byte)210;     
  System.out.println(b);

你说的是补码吧,反码不需要加1的
回复 使用道具 举报
本帖最后由 zhanghui123 于 2016-9-14 20:56 编辑

正数的原码反码补码一样,就是一个呗。负数的原码转换反码(反之一样)
就是最高位(符号位不变),其他的0变1,1变0.
比如 1  0011101 的反码就是 1  1100010
原码转补码可以快速转换:就是从右往左数第一个1开始,前面的0变1,1变0 就可以啦
比如:1  0011010的补码就是  1  1100110      符号位不变
回复 使用道具 举报
不要紧,代码会用就可以
回复 使用道具 举报
正数的原码反码补码都是自己本身;
负数的反码是在原码的基础上取反,即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

我没说错吧,今天刚学,呵呵
回复 使用道具 举报
这个不是重点
回复 使用道具 举报
反码规定就是除了符号位,其他位取反,没什么理由为什么
回复 使用道具 举报
HMSK 中级黑马 2016-9-14 22:11:12
10#
Anand 发表于 2016-9-14 20:22
你说的是补码吧,反码不需要加1的

是的
回复 使用道具 举报
本帖最后由 肖小龙 于 2016-9-14 22:57 编辑

负数的反码是对其原码逐位取反,但符号位除外   有个快速的的方法是  负数从右边找第一个1,住左边每位按位取反,就是原码与补码 -60的二进制是‭ 1 00111100‬                                    快速转换法:1 00111100‬
-60反码           1 11000011                                                          1 11000100
-60补码           1 11000100                          
回复 使用道具 举报
这个了解一下就行了
回复 使用道具 举报
告诉你个简单的方法
原码  补码相互转换  
从左向右除符号位(最高位)外,0变1,1变0,遇到最后一个1时结束
例如  :10011110    11100010
回复 使用道具 举报
也是跟着学习了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马