黑马程序员技术交流社区

标题: 关于强制转换溢出的问题 [打印本页]

作者: 林枢    时间: 2011-7-23 19:33
标题: 关于强制转换溢出的问题
比如 byte a= (byte) 400;  输出的时候是-112 。 转为二进制的时候,怎么看那里是溢出了
作者: 匿名    时间: 2011-7-23 20:00
byte类型的范围是-128至127,所以这样的转换肯定是有问题的。
高级数据类型int向低级数据类型byte的强制转换会导致数据丢失。
二进制中int  占32位   byte 占8位
由int转向byte ,高位被截掉了24位。
所以你得到的结果是-112
作者: 匿名    时间: 2011-7-23 20:13
标题: 回复 沙发 的帖子
400转为二进制之后, 是 100101100    那怎么看出那部分是溢出了,从哪里开始截
作者: 黑马赵丹枫    时间: 2011-7-23 21:26
二进制中int  占32位   byte 占8位
由int转向byte ,高位被截掉了24位(32-8)。
设400的二进制位数为:23个0 110010000  截取24位后的序列为Y: 10010000
最高位为符号位,Y-1取反后的序列为 Z:11110000=-112 (1代表负号,0代表正号)。
负数转换成二进制后,符号位不变,其它位取反加一得到转换后的二进制序列。
希望对你有帮助。
[ 本帖最后由 黑马赵丹枫 于 2011-07-24  08:34 编辑 ]
作者: 匿名    时间: 2011-7-23 21:39
400的二进制好像是11001000,-112的二进制为1001000,这么看的话,第一个1被看成是符号位了!
作者: 匿名    时间: 2011-7-23 23:52
强制转换的算法里最高位保留…,与7f求&,然后于最高位组合
作者: 匿名    时间: 2011-7-24 00:16
我还是不明白,谁再解释清楚的,通俗点
作者: 匿名    时间: 2011-7-24 10:11
楼上正解,没机会蹭分了露个脸吧。
作者: 匿名    时间: 2011-7-24 19:47
标题: 回复 8 # 的帖子
明白了,谢谢大家:lol




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