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条)

报告相同问题?