旋转4位整数

时间:2015-04-14 04:25:13

标签: java

我有一个int 00000000000000000000000000001101,代表十进制中的13。我试图通过将32位整数视为4位整数来循环旋转位,因为如果我旋转整数,则值变得非常大。对于上面的示例,在正确旋转2之后我想要的答案是00000000000000000000000000000111,其在基数10中为7。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:4)

试试这个:

x = (x >> 2) | ((x & 3) << 2);

这只是通过移位和蒙版来模拟旋转。我不认为你可以做得更好,没有做一个查找表(实际上可能不会更好); CPU没有本地处理nybbles的操作码。

答案 1 :(得分:2)

要将{4}向右旋转n,其中n为1,2或3:

((x >> n) | (x << (4-n))) & 0xF;

第一部分将最左边的4-n位向右移动;第二部分将最右边的n位向左移动。然后你or将它们放在一起,并使用& 0xF将可能由左移设置的额外位置零。