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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

byte b = (byte)130;   //结果为-126,结果是-126真心的不知道是怎么得到的,有木有大神给解答一下,最好详细点。谢谢

56 个回复

正序浏览
因为byte的范围是-128~127。目前的值130明显溢出了
回复 使用道具 举报
那byte a=(byte)128  ,128=1000 0000  ,我看的答案这里的1怎么即是符号位又是数值进行运算,最后结果-128.。
回复 使用道具 举报
超出byte的取值范围(-128--127),损失精度了
回复 使用道具 举报
回复太厉害了,牛
回复 使用道具 举报
受教了。。
回复 使用道具 举报
to be honest, i came here just for getting coins
回复 使用道具 举报
损失精度从大的向小的转
回复 使用道具 举报
四夕 中级黑马 2015-12-21 23:14:32
50#
厉害......学习了
回复 使用道具 举报
syb012 中级黑马 2015-10-17 13:51:18
49#
本帖最后由 syb012 于 2015-10-17 13:56 编辑

刚才看阳哥笔记复习之前看的视频,突然发现“原码转补码”和“补码转原码”的过程可以是一样的,都是符号位不变,各位取反,再加1。

之前的过程是
补码1000 0010
   - 0000 0001
----------------
     1000 0001
原码11111110=-126 (负数的原码第一位表示符号, 其余位表示值。)


其实也可以是
补码 1000 0010
      1111 1101
+   0000 0001
————————
原码1111 1110=-126


也就是说以后负数的十进制与二进制相互转换的方式可以这样:

负数的十进制————------------------负数的二进制原码————-----------------负数的二进制补码
     (负数的原码第一位表示符号,                           (从左往右与从右往左的过程是一样的,
         其余位表示值。可以很容易相互转换。)                   都符号位不变,各位取反,再加1。)
      
回复 使用道具 举报
C威 中级黑马 2015-10-16 22:20:09
48#
看视频,byte类型的范围是-128~127
回复 使用道具 举报
学习了......
回复 使用道具 举报
syb012 中级黑马 2015-10-16 18:26:19
46#
本帖最后由 syb012 于 2015-10-16 18:36 编辑

知识回顾:
正数的原码反码补码都是它本身

负数的原码第一位表示符号, 其余位表示值。(负数的二进制原码最容易转换成十进制,比如原码1000 0001=-1,原码1000 0011=-3)
负数的反码是在其原码的基础上,符号位不变,其余各位取反。(从负数的原码很难一下子看出对应的十进制数是多少)
负数的补码是在其原码的基础上,符号位不变,其余各位取反,再加1。(同反码,补码也很难看出对应的十进制数是多少。计算机中都是用补码来表示数字的)


解决问题:
现在看130对应的二进制是int类型
0000-0000 0000-0000 0000-0000 1000-0010
强制转换成byte类型后 是1000-0010,丢失精度,可以看出变成了一个负数


因为计算机中都是用补码储存数字的,所以1000-0010是一个补码,想得出它对应的十进制数,必须把补码转换成原码。
负数的补码是在原码的基础上,符号位不变,各位取反,再加1。那么补码转换成原码就是相应的逆过程。


补码1000 0010
   - 0000 0001
----------------
     1000 0001
原码11111110=-126 (负数的原码第一位表示符号, 其余位表示值。)



所以那个被推荐的解答其实是错误的,那个解答混淆了原码反码补码。



回复 使用道具 举报
byte 1字节,-2^7~2^7-1(-128~127);
short 2字节,-2^15~2^15-1;
int 4字节,-2^31~2^31-1;
long 8字节,-2^63~2^63-1;
^代表次方
回复 使用道具 举报
学习了,赞一个
回复 使用道具 举报
llyy 中级黑马 2015-10-16 15:20:25
43#
shenkeyangguang 发表于 2015-5-11 23:00
数据130默认是int类型的十进制数据
第一步十进制的130转换成二进制数据
1 0 0 0 0 0 1 0

计算机二进制是以补码存储的   为什么输出来的时候  不用原码要用补码呢
回复 使用道具 举报
你要看看 源码,反码,补码!!!
回复 使用道具 举报
回头复习看到了=、=,get
回复 使用道具 举报
老师刚讲~~~~~~~~~~~~
回复 使用道具 举报
学习了。。。
回复 使用道具 举报
123下一页
您需要登录后才可以回帖 登录 | 加入黑马