关于Java位移的问题?请高手帮忙!

xiaoyuan168 2009-08-13 07:19:20
public class BitMover {

public static byte swap(byte b){
int lowBits = b & 0xF; // 为什么这里取得是最低的4位?
int highBits = b & 0xF0; // 为什么这里取得是最高的4位?

int result = lowBits << 4 | highBits >>> 4;

return (byte)result;
}

public static void main(String args[]){
System.out.println(swap((byte)10));
System.out.println(swap((byte)1));
System.out.println(swap((byte)-1));
}
}

**************************************************
int lowBits = b & 0xF; 和 int highBits = b & 0xF0;
不太明白,请高手帮忙解答一下,谢谢^^
以及如何计算这里的打印结果?
...全文
97 5 打赏 收藏 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
晴天v1 2009-08-13
  • 打赏
  • 举报
回复
二楼说的明白。
xiaoyuan168 2009-08-13
  • 打赏
  • 举报
回复
那么如何计算打印结果呢?
poimarine 2009-08-13
  • 打赏
  • 举报
回复
"不管lowBits的高4位是什么"

--->

""不管b的高4位是什么"
poimarine 2009-08-13
  • 打赏
  • 举报
回复
int lowBits = b & 0xF; // 为什么这里取得是最低的4位?

0xF 就是 0x0F 二进制: 00001111
用它去 'AND' b, 高四位因为已经有0了,不管lowBits的高4位是什么,结果都是0
低四位因为都是1,所以最后结果取决于b里面的值
举例:

设 b = 27 二进制:00011011
b & 0xF 运算如下:

00011011
& 00001111
-----------
00001011

高四位同理。

“与逻辑门”的运算规则:两个数只要有一个为零,则结果为零;既只有都为1时,结果才为1。
YY_MM_DD 2009-08-13
  • 打赏
  • 举报
回复
现在还用这个来移动啊..
用BigDecimal zero = new BigDecimal(52.2);
zero.movePointRight(n);
zero.movePointLeft(n);
多简单...
呵呵

62,620

社区成员

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

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