如何在Java中使用bitshift切换整数标志?
我在一个矩阵中有许多对象,它们将与相邻对象的连接存储在一个整数变量中如何在Java中使用bitshift切换整数标志?,java,bit-shift,Java,Bit Shift,我在一个矩阵中有许多对象,它们将与相邻对象的连接存储在一个整数变量中 public static final int NONE = 0x00; public static final int LEFT = 0x01; public static final int TOP = 0x02; public static final int RIGHT = 0x04; public static final int BOTTOM = 0x08; connections = LEFT | RIGHT
public static final int NONE = 0x00;
public static final int LEFT = 0x01;
public static final int TOP = 0x02;
public static final int RIGHT = 0x04;
public static final int BOTTOM = 0x08;
connections = LEFT | RIGHT | BOTTOM; // example usage
现在我希望能够将某些对象顺时针或逆时针旋转90°。在上述示例中,顺时针旋转应等同于
connections = TOP | BOTTOM | LEFT;
左/右位移1似乎是显而易见的解决方案,但我不知道如何将位移限制为从左(0x01)到底(0x08)的位
我希望有人能帮助我。当涉及到位操作时,我会不知所措。这应该可以做到:
connections = ((connections << 1) | (connections >> 3)) & 0x0f;
connections=((connections>3))&0x0f;
这应该可以做到:
connections = ((connections << 1) | (connections >> 3)) & 0x0f;
connections=((connections>3))&0x0f;
您不想使用枚举和枚举集的任何原因?这是出于性能原因。我正在为移动平台编写游戏。您是否尝试使用EnumSet并发现它是一个瓶颈?不,对不起。我不知道使用bitshift是否有更大的性能改进。这项操作可能会在游戏中经常对许多对象(100+)执行,因此只使用bitshift似乎更容易、更快。永远不要猜测性能。编写最干净的代码,测试它的性能,看看它是否足够。如果不是,则进行优化,直到它足够。您不想使用枚举和枚举集的原因是什么?这是出于性能原因。我正在为移动平台编写游戏。您是否尝试使用EnumSet并发现它是一个瓶颈?不,对不起。我不知道使用bitshift是否有更大的性能改进。这项操作可能会在游戏中经常对许多对象(100+)执行,因此只使用bitshift似乎更容易、更快。永远不要猜测性能。编写最干净的代码,测试它的性能,看看它是否足够。如果不是,那么优化直到它足够。谢谢!这真的很棒!对于逆时针旋转,我只需将左移换成右移,反之亦然!非常感谢。这真的很棒!对于逆时针旋转,我只需将左移换成右移,反之亦然!