java - 哪种算法可以更快地检查某个位是否已设置?

标签 java algorithm optimization bit-manipulation

我正在制作一款游戏,其中我将大量数据存储在一个整数或长整数中,因为我将拥有大量数据。出于性能原因,我不想使用整个类,也不需要它们。我找到了两种从整数中检索一位的方法。我想知道是否有人知道我应该使用哪个或者哪个更快。

方法:

return (integer & (1 << bit)) != 0;

return (integer >> bit& 0x1) == 1;

最佳答案

很可能您正在测试的位比您正在测试的整数“更稳定”。因此,您可以为位设置常量,这意味着您只需进行一次移位。例如:

static final int LEFT_WALL = 1 << 1;
static final int RIGHT_WALL = 1 << 2;
static final int BOTTOM_WALL = 1 << 3;
static final int TOP_WALL = 1 << 4;

然后在你的循环中,你只是检查

if ((integer & LEFT_WALL) != 0)
  // left wall collision
if ((integer & RIGHT_WALL) != 0)
  // right wall collision
...

因此您在循环中只执行两个操作(按位与和比较),而不是三个(移位、与和比较)。

比速度提升更重要的是(如评论中所指出的),它还使您更加清楚每一位的用途,因此代码更易于阅读。

关于java - 哪种算法可以更快地检查某个位是否已设置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7374447/

相关文章:

java - SWT 中的 'show' 和 'paint' 事件有什么区别?

python - 检查两个列表一致性的快速方法

c++ - 非常基本的文件加密形式?

python - 从 python 中**快速**截取屏幕截图

gcc - gcc 链接器选项可以更改已编译二进制文件中的汇编器指令吗?

performance - 高效地反转 64 位字中 16 位数量的顺序

java - guice:自动绑定(bind)泛型类

java - 强制 Spring 的 MBeanExporter 使用特定的 MBeanServer

Java:生成任意大小的基于平铺的圆圈

php - Facemash算法