位运算符的问题

huxiuliang 2008-02-24 04:37:42
请各位同仁帮我解释一下 ,下面的代码
public void sendString(PrintStream outstream, String string) {
// TODO Auto-generated method stub
try {
outstream.println(string.length());
int len = string.length() * 2;
byte buf[] = new byte[len];
for (int i = 0; i < string.length(); i++) {
buf[i * 2] = (byte) (string.charAt(i) >> 8);
buf[i * 2 + 1] = (byte) string.charAt(i);
}
outstream.write(buf, 0, len);//将 len 字节从指定的初始偏移量为 0 的字节数组写入此流。
outstream.flush();
} catch (Exception e) {
offline = true;
System.out.println(" sendString() error:" + e);
}
}
...全文
91 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
yes152 2008-02-24
  • 打赏
  • 举报
回复
...0 0 1 1 0 0
...0 0 0 0 1 1
呵呵,上面的没对好位
yes152 2008-02-24
  • 打赏
  • 举报
回复
算术右移位运算(有符号右移) 表达式"a>>b"
--------------
例:
12>>2
--------------
12的二进制形式:
...32 16 8 4 2 1
...0 0 1 1 0 0
--------------
12右移2位
...0 0 1 1 0 0
...0 0 0 0 0 1 1
二进制11就是整数3
--------------
所以
12>>2 的结果等于 3
12>>1 的结果等于 6

wuxo84 2008-02-24
  • 打赏
  • 举报
回复
方法名为sendStirng,传进来两个参数,一个是输出流类型,一个是String类型
先打印出字符串长度,然后开一个byte数组buf,长度是String的长度乘以2,
做一个循环,执行次数为string的长度,取stirng中位置为i的字符,将其右移8位,转换成byte类型后赋给buf中下标为偶数的元素,
取stirng中位置为i的字符,转换成byte类型后赋给buf中下标为奇数的元素,
从buf的起始位置开始将其写入到输出流中,写得长度是len,之后输出,最后捕捉异常

关于右移运算:
value >> num
这里,num 指定要移位值value 移动的位数。也就是,右移运算符>>使指定值的所有位都右移num位。
用二进制表示该过程可以更清楚地看到程序的运行过程:
00100011 35
>> 2
00001000 8
将值每右移一次,就相当于将该值除以2并且舍弃了余数。
右移时,被移走的最高位(最左边的位)由原来最高位的数字补充。


枫叶rain 2008-02-24
  • 打赏
  • 举报
回复
public void sendString(PrintStream outstream, String string) {
try {
// 将字符串的长度写入并换行
outstream.println(string.length());
int len = string.length() * 2;
// 定义一个字符串2倍长度的字节数组
byte buf[] = new byte[len];
for (int i = 0; i < string.length(); i++) {
// 如果是偶数的位置就向右移动8位,即偶数的地方放null
buf[i * 2] = (byte) (string.charAt(i) >> 8);
// 在奇数的位置放数据
buf[i * 2 + 1] = (byte) string.charAt(i);
}
// 写入
outstream.write(buf, 0, len);// 将 len 字节从指定的初始偏移量为 0 的字节数组写入此流。
outstream.flush();
} catch (Exception e) {
// offline = true;
System.out.println(" sendString() error:" + e.getMessage());
}

62,623

社区成员

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

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