黑马程序员技术交流社区

标题: byte b= byte 130? [打印本页]

作者: 七了个七    时间: 2015-8-22 23:08
标题: byte b= byte 130?
  ,byte的大小在-128~+的127,  130 超过其值得区间
  可以进行强制转换 byte b= byte 130 ,结果是-126?
130 不是已经超过byte的区间了么?强制转换后130 在byte中怎么表示?
这个怎么有点搞不懂为什么



作者: Glc90    时间: 2015-8-22 23:11
我也不太懂, 同问!!!!!!1
作者: 殷俊    时间: 2015-8-22 23:34
因为130的二进制数数是10000010,超过了byte的范围,最高位为1,因此就成了一个负数;此时10000010就是补码,10000010的反码是10000001,他的原码就是11111110,11111110也就是-126
作者: 七了个七    时间: 2015-8-22 23:43
殷俊 发表于 2015-8-22 23:34
因为130的二进制数数是10000010,超过了byte的范围,最高位为1,因此就成了一个负数;此时10000010就是补码 ...

为什么成补码了。。。 前面后面都看懂了,  谢谢大神啦
作者: beimenshisan    时间: 2015-8-22 23:44
再学习以下进制转换那一节吧
作者: 不想睡    时间: 2015-8-22 23:47
额,总算看明白了
作者: 殷俊    时间: 2015-8-22 23:48
七了个七 发表于 2015-8-22 23:43
为什么成补码了。。。 前面后面都看懂了,  谢谢大神啦

因为数的运算都是用补码操作的,你对130进行强转操作,本来130是正数,正数的原码反码补码是一样的,变为负数,是补码在进行运算,成为负数后的数就是补码,如果要读,就要转换为原码,说白了一点就是,操作都是用补码进行操作的
作者: 七了个七    时间: 2015-8-23 00:11
殷俊 发表于 2015-8-22 23:48
因为数的运算都是用补码操作的,你对130进行强转操作,本来130是正数,正数的原码反码补码是一样的,变为 ...

恩恩 谢谢这么详细的 ,明白啦
作者: 不忘初心、    时间: 2015-8-23 00:22
开始数都是补码,添加字节啊,进行反码,源码得出来的
作者: 蓬头小道士    时间: 2015-8-23 07:22
从127开始每多1,127的二进制就进1,然后就是-126了




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