黑马程序员技术交流社区

标题: 类型转换问题!! [打印本页]

作者: l631356126    时间: 2015-9-6 21:43
标题: 类型转换问题!!
byte  b = 130; 这句为什么不对! 怎么改?
作者: 横创    时间: 2015-9-6 21:57
不会!!
作者: lishuai881512    时间: 2015-9-6 22:00
byte 类型范围是-128 到127 超出范围了  所以要提升为 int类型
作者: lishuai881512    时间: 2015-9-6 22:07
byte b = (byte)130;
作者: 生存追求    时间: 2015-9-6 22:14
byte b=(byte) 130;
作者: 生存追求    时间: 2015-9-6 22:18
lishuai881512 发表于 2015-9-6 22:07
byte b = (byte)130;

这个结果b=-126,因为130超出127
作者: 残影    时间: 2015-9-6 22:31
因为130超出了byte取值范围,byte取值范围为-128到127。所以编译就会失败报错。这时候需求强制转换,byte  b = (byte)130。然而,这样强制转换,
本来130是int四字节对吗,二进制为 0000-0000 0000-0000 0000-0000 1000-0010对吧,强制转换之后就把前面三个字节砍了。然后就变成byte 10000010,而且byte 的最高位为1负数。所以我们需要知道他的原码才知道这个数值是几。由于计算机运算时用补码进行运算的。
所以此时就是该数字的补码:1000-0010,我们需要-1求反码 得:1000-0001,那么原码就是:1111-1110。这个数就是-126。

作者: 残影    时间: 2015-9-6 22:33
1111-1110怎么算,知道吗?




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