XUNQIAO 2010-02-25 11:01
浏览 187
已采纳

这几行代码如何理解?

ipFile 是个随机文件访问类

private long readLong4(long offset) {
long ret = 0;
try {
ipFile.seek(offset);
ret |= (ipFile.readByte() & 0xFF);
ret |= ((ipFile.readByte() << 8) & 0xFF00);
ret |= ((ipFile.readByte() << 16) & 0xFF0000);
ret |= ((ipFile.readByte() << 24) & 0xFF000000);
return ret;
} catch (IOException e) {
return -1;
}
}

小弟才疏学浅实在是对上面几行代码很头疼,不知哪位大虾帮我解读

  • 写回答

4条回答 默认 最新

  • linmei_ai 2010-03-01 16:26
    关注

    都要弄成2进制进行计算,最后结果再转换成16进制,这样更简单些,当然你计算能力够好,直接用十六进制的计算
    例子如下:
    0x1D<<24:这个是“移位”运算
    0x1D的二进制编码是:0000 0000 0000 0000 0000 0000 0001 1101

    <<运算规则:按二进制形式把所有的数字向左移动对应的位数,高位移出(舍弃),低位的空位补零。
    0x1D<<24后是:0001 1101 0000 0000 0000 0000 0000 0000
    (0x1D << 24) & 0xFF000000:这个是“与”运算
    0xFF000000化成二进制是:1111 1111 0000 0000 0000 0000 0000 0000
    & 运算规则:同1的时候为1,否则都为0
    对齐位置计算:(0x1D << 24) & 0xFF000000
    0001 1101 0000 0000 0000 0000 0000 0000
    1111 1111 0000 0000 0000 0000 0000 0000
    结果:0001 1101 0000 0000 0000 0000 0000 0000
    最后一个是“或”运算(同理,自己计算)
    | 运算规则:同0的时候才是0,否则都是1
    这样如果再不明白就无语了。。。。。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
  • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?
  • ¥15 乘性高斯噪声在深度学习网络中的应用
  • ¥15 关于docker部署flink集成hadoop的yarn,请教个问题 flink启动yarn-session.sh连不上hadoop,这个整了好几天一直不行,求帮忙看一下怎么解决
  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛