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