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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 孔德智 中级黑马   /  2012-8-28 20:49  /  1780 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 孔德智 于 2012-8-29 00:23 编辑

byte b=-1;  //1111 1111
int a=b; //此时a的值为 -1 (即11111111 11111111 11111111 11111111)
请问将11111111提升为00000000 00000000 00000000 11111111,为什么说这样可以保留原字节数据不变,又可以避免-1出现

4 个回复

倒序浏览
在java中由于byte的数值范围,在int的范围之内,也就是说int完全容纳byte的所有值
所以byte转int在java中,是完全按byte值来直接赋给int变量
回复 使用道具 举报
1111-1111这是一个字节这个字节转换成十进制时表示-1,-1用一个int类型来接收是被提升了还是-1,但是用四个字节来表示即:
11111111-->11111111-11111111-11111111-11111111,
如果提升的时候前面不补1补0,这时候表示-1的一个字节被提升到int类型4个字节就不是-1了,即:255
11111111-->00000000-00000000-00000000-11111111
那么只要在前面补0,既可以保留原字节数据不变,又可以避免-1的出现。
接下来就是怎样才能按前面补0这种方法将独到的字节提升到int类型的呢?
11111111-11111111-11111111-11111111
&00000000-00000000-00000000-11111111
-----------------------------------------
00000000-00000000-00000000-11111111
即将读取的那个字节&上255即可。

点评

你理解了我想问的意思,明白了谢谢了  发表于 2012-8-29 00:21
回复 使用道具 举报
这样理解吧,byte是只能装1个苹果的小箱子。int是能装4个苹果的大箱子。当你把小箱子装到大箱子里,就不会存在溢出等问题。所以可以保留原数据不变。
回复 使用道具 举报
问题已搞定
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马