我有一个int 00000000000000000000000000001101
,代表十进制中的13。我试图通过将32位整数视为4位整数来循环旋转位,因为如果我旋转整数,则值变得非常大。对于上面的示例,在正确旋转2之后我想要的答案是00000000000000000000000000000111
,其在基数10中为7。
非常感谢任何帮助。
答案 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
将可能由左移设置的额外位置零。