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

报告相同问题?

悬赏问题

  • ¥15 微信小游戏反编译后,出现找不到分包的情况
  • ¥15 如何实现从tello无人机上获取实时传输的视频流,然后将获取的视频通过yolov5进行检测
  • ¥15 WPF使用Canvas绘制矢量图问题
  • ¥15 用三极管设计一个单管共射放大电路
  • ¥15 孟德尔随机化r语言运行问题
  • ¥15 pyinstaller编译的时候出现No module named 'imp'
  • ¥15 nirs_kit中打码怎么看(打码文件是csv格式)
  • ¥15 怎么把多于硬盘空间放到根目录下
  • ¥15 Matlab问题解答有两个问题
  • ¥15 LCD12864中文显示