黑马程序员技术交流社区
标题:
关于强制转换溢出的问题
[打印本页]
作者:
林枢
时间:
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