iteye_10600 2010-04-22 12:00
浏览 213
已采纳

关于 java 位移 、与 的疑惑

s是一个字符串 ,现在 将s中的字符位移,然后写入到 OutputStream 中

[code="java"]
public final void writeChars(String s, OutputStream out) {
int len = s.length();
for (int i = 0; i < len; i++) {
int v = s.charAt(i);

out.write((v >>> 0) & 0xFF);(1)
out.write((v >>> 8) & 0xFF);(2)

}
}
[/code]

请问(1)(2) 是什么意思的?

另外(1)中 ,字符根本就没有动,有何意义?

  • 写回答

3条回答 默认 最新

  • 拽拽的初行者 2010-04-22 12:44
    关注

    [b][color=blue](1)(2)是分别写入一个char的低8位数字、高8位数字。

    解释如下:

    Java中的Character是16位的Unicode。

    假设1个char的编码为 YYYYYYYY(高8位) XXXXXXXX(低8位)

    (v >>> 0) & 0xFF

    v>>>0 无符号左移0为 得到: YYYYYYYY XXXXXXXX

    再和 0xFF相与:

    00000000 00000000 YYYYYYYY XXXXXXXX
    相与
    00000000 00000000 00000000 11111111

    得到
    00000000 00000000 00000000 XXXXXXXX

    out.write((v >>> 0) & 0xFF);(1)

    写入的就是 整数 00000000 00000000 00000000 XXXXXXXX( char的低8位)

    同理 out.write((v >>> 8) & 0xFF);(2)

    v>>>8 无符号左移8为 得到: 00000000 YYYYYYYY

    再和 0xFF相与:

    00000000 00000000 00000000 YYYYYYYY
    相与
    00000000 00000000 00000000 11111111

    得到:
    00000000 00000000 00000000 YYYYYYYY

    写入的就是 整数 00000000 00000000 00000000 YYYYYYYY ( char的高8位)

    这样就把一个Character的数据,以2进制bit流的形式写入到 硬盘中了。
    [/color][/b]

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

报告相同问题?

悬赏问题

  • ¥20 求数据集和代码#有偿答复
  • ¥15 关于下拉菜单选项关联的问题
  • ¥20 java-OJ-健康体检
  • ¥15 rs485的上拉下拉,不会对a-b<-200mv有影响吗,就是接受时,对判断逻辑0有影响吗
  • ¥15 使用phpstudy在云服务器上搭建个人网站
  • ¥15 应该如何判断含间隙的曲柄摇杆机构,轴与轴承是否发生了碰撞?
  • ¥15 vue3+express部署到nginx
  • ¥20 搭建pt1000三线制高精度测温电路
  • ¥15 使用Jdk8自带的算法,和Jdk11自带的加密结果会一样吗,不一样的话有什么解决方案,Jdk不能升级的情况
  • ¥15 画两个图 python或R