o0oo0o0o0o0谁能帮我解释解释这个算法是怎么回事!!o0o0o0o0o0o0o0o0

wangshu3000 2005-04-08 03:39:01
public int readInt() throws IOException {
byte[] buf = new byte[4];
read(buf);//这个是inputStream里的read方法
return ((((((buf[3] & 0xFF) << 8) | // 主要是这几句
(buf[2] & 0xFF)) << 8) | // 主要是这几句
(buf[1] & 0xFF)) << 8) | // 主要是这几句
(buf[0] & 0xFF); // 主要是这几句
}
我的理解是用一个byte数组(长度4),来表示一个int型,
byte是2的8次方个数据, 一个byte是一个字节
int 是2的32次方个数据。 四个字节表示一个int。

为什么要取每个byte要与0xFF 与运算。

我想0XFF转成二进制应该是11111111.不知道对不对!!

请高手指点啊,分不是问题。

最好详细解释一下这个函数!
位置org.eclipse.swt.internal.image.LEDataInputStream
继承InputStream
...全文
136 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangshu3000 2005-04-08
  • 打赏
  • 举报
回复
非常明白,谢谢

懂了。
jFresH_MaN 2005-04-08
  • 打赏
  • 举报
回复
再形象一点

我有一个byte a=10101010,8位2进制数
a & 0xff --->10101010 (定义为b)
b << 8 ----->10101010000000 (定义为c,16位2进制数)
定义byte d=01010101,
c | d---->1010101001010101
上面的结果就是把a和d连接成一个16位的数了

而上面的代码就是这样一直操作
最终得到32位
jFresH_MaN 2005-04-08
  • 打赏
  • 举报
回复
首先你要搞清楚int是32位的,byte是8位的
所以上面用byte[4]来存储一个int的值

一个byte,也就是byte数组里面的元素和)xFF来求&(与)
目的是得到一个8位的2进制数

<<在运算层面上看是把一个数扩大2的8次方,在这里其实就是把原来的8位二进制熟左移8位
然后右边补0,构成一个16位的二进制数
再之后是一个|(或)运算,其实就是把原来的16进制的右边8位0用或的那个8位二进制数来代替
这样就得到了一个新的16位二进制数,然后在反复这样的工作就得到了一个整形的总共32位而进制数

不知道楼主有没有看明白。我的表达能力有限

补充一下
任何数和0Xff求&其实就是得到那个数的本身,不过最后可以填满8位数
任何一个数和0x00求|也是得到本来的数,
上面就是通过这样连接2个8进制数的

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧