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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 林枢 黑马帝   /  2011-7-23 19:33  /  3250 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

比如 byte a= (byte) 400;  输出的时候是-112 。 转为二进制的时候,怎么看那里是溢出了

评分

参与人数 1技术分 +1 收起 理由
小龙 + 1

查看全部评分

8 个回复

倒序浏览
黑马网友  发表于 2011-7-23 20:00:26
沙发
byte类型的范围是-128至127,所以这样的转换肯定是有问题的。
高级数据类型int向低级数据类型byte的强制转换会导致数据丢失。
二进制中int  占32位   byte 占8位
由int转向byte ,高位被截掉了24位。
所以你得到的结果是-112

评分

参与人数 1技术分 +1 收起 理由
小龙 + 1 答题有分哦!

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-7-23 20:13:52
藤椅

回复 沙发 的帖子

400转为二进制之后, 是 100101100    那怎么看出那部分是溢出了,从哪里开始截
回复 使用道具 举报
二进制中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:39
报纸
400的二进制好像是11001000,-112的二进制为1001000,这么看的话,第一个1被看成是符号位了!
回复 使用道具 举报
黑马网友  发表于 2011-7-23 23:52:21
地板
强制转换的算法里最高位保留…,与7f求&,然后于最高位组合
回复 使用道具 举报
黑马网友  发表于 2011-7-24 00:16:09
7#
我还是不明白,谁再解释清楚的,通俗点
回复 使用道具 举报
黑马网友  发表于 2011-7-24 10:11:47
8#
楼上正解,没机会蹭分了露个脸吧。
回复 使用道具 举报
黑马网友  发表于 2011-7-24 19:47:33
9#

回复 8 # 的帖子

明白了,谢谢大家:lol
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马