Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中使用bitshift切换整数标志?_Java_Bit Shift - Fatal编程技术网

如何在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似乎更容易、更快。永远不要猜测性能。编写最干净的代码,测试它的性能,看看它是否足够。如果不是,那么优化直到它足够。谢谢!这真的很棒!对于逆时针旋转,我只需将左移换成右移,反之亦然!非常感谢。这真的很棒!对于逆时针旋转,我只需将左移换成右移,反之亦然!