位运算操作的应用场景有哪些?

吴佳峻 2010-01-08 04:27:57
有一些位运算符的算法感到不解,还有就是它的应用场景。
例子一:
public static int readInt4RS(RecordStore rs,int recordid){
byte [] tmp=new byte[4];
try {
tmp = rs.getRecord(recordid);
}
catch (Exception ex) {
}
int result=(tmp[0]&0x0000ff);
result=(result<<8)+(tmp[0]&0x0000ff);
result=(result<<8)+(tmp[0]&0x0000ff);
result=(result<<8)+(tmp[0]&0x0000ff);
return result;
}
它是怎么转换成整形的呢?
例子二:
public static final int GK_UP = 1 << 0;
public static final int GK_DOWN = 1 << 1;
public static final int GK_LEFT = 1 << 2;
public static final int GK_RIGHT = 1 << 3;
public static final int GK_NUM0 = 1 << 4;
public static final int GK_NUM1 = 1 << 5;
public static final int GK_NUM3 = 1 << 6;
public static final int GK_NUM5 = 1 << 7;
public static final int GK_NUM7 = 1 << 8;
public static final int GK_NUM9 = 1 << 9;
public static final int GK_STAR = 1 << 10;
public static final int GK_POUND = 1 << 11;
public static final int GK_SOFT_LEFT = 1 << 12;
public static final int GK_SOFT_RIGHT = 1 << 13;
public static final int GK_MIDDLE = 1 << 14;
public static final int GK_RETURN = 1 << 15;
为什么不直接1到15,而要这样做呢?

刚学J2ME,有些底层算法还有应用场景不是很理解,望指教,还有要学好J2ME需要学习哪些东西,刚看了
游戏框架的状态机制,希望高人指点。
...全文
514 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
吴佳峻 2010-01-09
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 mailbomb 的回复:]
位运算主要是存储数据,节约内容,操作速度高
[/Quote]
谢谢回答!
网络咖啡 2010-01-09
  • 打赏
  • 举报
回复
位运算主要是存储数据,节约内容,操作速度高
吴佳峻 2010-01-09
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 chenqiu1024 的回复:]
第二个例子很常见,这样用是因为这里的各个量不是互斥的,而可以同时并存。于是就可以用一个整形值把它们同时表示出来,每一个位对应一个按键,为1就是这个按键被按下了
[/Quote]
还是不理解。嗨。
吴佳峻 2010-01-09
  • 打赏
  • 举报
回复
谢谢,各位朋友的回答,我在好好看看。这有个QQ群,
101890374
我刚建的,希望各位能够加入,好好交流。不过公司
不让上qq,只有上网页qq了。
chenqiu1024 2010-01-09
  • 打赏
  • 举报
回复
第二个例子很常见,这样用是因为这里的各个量不是互斥的,而可以同时并存。于是就可以用一个整形值把它们同时表示出来,每一个位对应一个按键,为1就是这个按键被按下了
kf156 2010-01-08
  • 打赏
  • 举报
回复
以前也是听说有的手机不支持,不过估计是MIDP1.0的手机不支持吧。
MIDP2.0里GameCanvas的getKeyStates()做法和上边的例二显然原理相同,目的就是支持同时按键
prince58 2010-01-08
  • 打赏
  • 举报
回复
关于按键 我确实也没弄过同时按键的。不知手机是否支持。

这样做的有个好处就是:

按键时:

protected void keyPressed(int keyCode)
{

int keyFlag = getMaskKeyCode(keyCode); //这个地方getMaskKeyCode是自己写的,让他返回GK_UP = 1 < < 0;这些值

m_current_keys_state |= keyFlag;
}

释放按键时可以:

protected void keyReleased (int keyCode)
{

int keyFlag = getMaskKeyCode(keyCode);
m_current_keys_state &= ~keyFlag;

}


yptkym 2010-01-08
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 kf156 的回复:]
例一是把4个byte转成1个int,int是4字节,所以由4个byte可以表示,不过例子中下标有问题

例二是按键,这样做的好处是,可以支持同时按键,即同时按下UP和LEFT,也能被正确识别。
[/Quote] 亚日兄 手机可以支持同时按键的???为什么以前做手机游戏的时候都不支持??? 指教下 3Q
prince58 2010-01-08
  • 打赏
  • 举报
回复
比如处理颜色时就很有用,ARGB数据是一个int,
int color

可以用

((color & 0xFF000000)>>24) & 0xFF //得到A的值 ,也就是透明通道的值
((color & 0x00FF0000)>>16) & 0xFF //R 也就是红色的值
((color & 0x0000FF00)>>8 ) & 0xFF //G 绿色的值
((color & 0x000000FF) ) & 0xFF //B 蓝色的值

返过来也可以通过 A R G B的值来组成一个ARGB数据来进行处理。

当你要处理图颜色时 你就发现,位移非常方便。
kf156 2010-01-08
  • 打赏
  • 举报
回复
例一是把4个byte转成1个int,int是4字节,所以由4个byte可以表示,不过例子中下标有问题

例二是按键,这样做的好处是,可以支持同时按键,即同时按下UP和LEFT,也能被正确识别。
Sodino 2010-01-08
  • 打赏
  • 举报
回复
没啥固定的,最重要的是适合自己。

13,100

社区成员

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

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