黑马程序员技术交流社区
标题:
byte&0xff类型提升的问题
[打印本页]
作者:
冯晓骏
时间:
2013-10-24 19:42
标题:
byte&0xff类型提升的问题
老毕的视频里讲BufferedInputStream,有一段讲到判断返回结束的标记是用int接收,返回-1时结束,但读取的是byte,最后做了一个操作return 0xff
int read()
{
byte b;
b = in.read();
return b&0xff;
复制代码
我想问如果是b是255,先提升了再与上0xff,传给int,不还是32个1么,为什么读出来就变成255了,而不是-1
作者:
Stephen_Chow
时间:
2013-10-24 20:30
byte型的b是255,那么是11111111
提升为int型的,为:11111111 11111111 11111111 11111111
在与上0xff即:
11111111 11111111 11111111 11111111
&00000000 00000000 00000000 11111111
——————————————————————————————-
00000000 00000000 00000000 11111111
这样一来,即可以保留原字节数据不变,又可以避免-1的出现。而取数据的时候,就会强转只取最低8位的源数据。
总结:参见毕老师笔记
结论:
字节流的读一个字节的read方法为什么返回值类型不是byte,而是int。
因为有可能会读到连续8个二进制1的情况,8个二进制1对应的十进制是-1.
那么就会数据还没有读完,就结束的情况。因为我们判断读取结束是通过结尾标记-1来确定的。
所以,为了避免这种情况将读到的字节进行int类型的提升。
并在保留原字节数据的情况前面了补了24个0,变成了int类型的数值。
而在写入数据时,只写该int类型数据的最低8位。
作者:
乔兵
时间:
2013-10-26 14:20
楼主你好,如果问题已解决请将帖子状态修改为提问结束,
如果未解决请继续提问,谢谢合作
修改方法请看解释帖:
http://bbs.itheima.com/thread-89313-1-1.html
作者:
麦子
时间:
2013-10-26 15:26
哥么我写个式子你就懂了
byte b ---> XXXX XXXX
0000 0000 0000 0000 0000 0000 XXXX XXXX
& 0000 0000 0000 0000 0000 0000 1111 1111
----------------------------------------------------------------------
0000 0000 0000 0000 0000 0000 XXXX XXXX
得到的还是原数了
还有你的b是255,这个是取不到的,会损失精度,byte表示的范围为:-128~127
好好学习哦,不懂得可以问我
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2