0

我在一个矩阵中有许多对象,它们将与其邻居的连接存储在一个整数变量中。

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

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

4

1 回答 1

3

这应该这样做:

connections = ((connections << 1) | (connections >> 3)) & 0x0f;
于 2012-10-15T15:10:48.790 回答