黑马程序员技术交流社区
标题:
关于补码,反码,原码的问题
[打印本页]
作者:
我来了
时间:
2015-8-25 11:19
标题:
关于补码,反码,原码的问题
给大家一个例子,求大神指点。
byte b2 = (byte) 130;
System.out.println(b2);
类名和主函数就不写了,这个代码涉及到补码,反码,原码的问题,有会的同学,帮忙分析一下,怎么区分,最好能列出这个计算过程。
作者:
蚊子先生
时间:
2015-8-25 11:51
输出错误吧
作者:
Andy丶JF
时间:
2015-8-25 12:50
同学,我也是刚学,说错了勿怪哈!
因为130转换成Byte类型,只剩下1个字节,,而在内存 中都是以 补码的形式存在的,要把值赋给b2输出,所以要将补码转换成反码,进而转换成原码。 数值的正负看最高位,1负零正,正数三码是一样的,负数的反码等于原码的最高位不变,其他位取反。 补码等于反码加1.
作者:
Coolman
时间:
2015-8-25 12:52
原码、反码、补码
正数 负数
原码: 二进制本身 二进制本身
反码: 同原码 除符号位,原码逐位取反
补码: 同原码 反码+1
作者:
zhao1991
时间:
2015-8-25 13:19
130的二进制表示是00000000 00000000 00000000 10000010,将其转换为byte时,只会取最低8位,即 10000010
作者:
zhao1991
时间:
2015-8-25 13:21
由于 10000010的第一位是符号位,所以打印出的结果是-126,java中只有有符号数,是用补码表示的,不要考虑源码和反码
作者:
我来了
时间:
2015-8-26 08:06
视频中说截取后的10000010这个是原码,要算出补码,为什么,10000010是原码?
作者:
michael_wlq
时间:
2015-8-26 08:37
我写过类似的帖子。。说byte为什么能取到-128
作者:
fantianfei
时间:
2015-8-26 09:36
是个负数
作者:
aguang
时间:
2015-8-26 10:24
为什么,10000010是原码?
作者:
yongyinqi
时间:
2015-8-26 10:25
刘意的视频里面讲的很清楚
作者:
我来了
时间:
2015-8-26 21:23
视频里面就提到一句,他说你们拿的是原码,难道我们视频都不一样?求解答啊
作者:
yanglingui
时间:
2015-8-26 21:29
原码/反码/补码 原码:最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小不够8位 数值位不全 左边补零. 符号位 数值位 7 0 0000111 -7 1 0000111 反码: 正数的反码与其原码相同;负数符号位不变 .,数值位1变0 0变1. 7 0 0000111 -7 1 1111000 补码: 正数的补码与其原码相同; 负数在其反码的基础上补1 7 0 0000111 -7 1 1111001 所有数据的运算都是采用补码进行的。
作者:
yanglingui
时间:
2015-8-26 21:31
当 int类型 为 8个字节 byte为 4个所以要把删除int 比byte多的4个字节 然后再根据源码和补码的关系进行转化 这需要自己在纸上 进行运算
作者:
我来了
时间:
2015-8-28 08:55
你说的那个我知道啊,我就想问,为什么截取后的是原码
作者:
ln0491
时间:
2015-8-28 09:12
学习下,这个也不太明白
作者:
tommychang
时间:
2015-8-28 09:35
zhao1991 发表于 2015-8-25 13:21
由于 10000010的第一位是符号位,所以打印出的结果是-126,java中只有有符号数,是用补码表示的,不要考虑 ...
正解!
作者:
我来了
时间:
2015-8-29 12:38
问了一下老师,老师说截取后的二进制是计算机操作过的,所以是补码,如果截取后的二进制是个正数,那么你可以说他是原码,补码,反码都行,但是要记住,补码是计算机内部操作过的数,原码是我们通过控制台看到的数,所以要把那个补码转换成原码,这样我们就能看到了
作者:
xzl6313
时间:
2015-8-29 13:05
计算机识别的是补码,所以先转成2进制就是补码了,然后再算反码,再算源码 就是答案了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2