我在矩阵中有许多对象,这些对象将到其邻居的连接存储在单个整数变量中。

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°CW或CCW。在上面的示例中,顺时针旋转应等于

connections = TOP | BOTTOM | LEFT;


左/右移位1似乎是显而易见的解决方案,但我不知道如何将移位限制为LEFT(0x01)到BOTTOM(0x08)。

我希望有一个人可以帮助我。当涉及到位操作时,我迷失了。

最佳答案

应该这样做:

connections = ((connections << 1) | (connections >> 3)) & 0x0f;

10-08 05:21