Java - 使用按位运算的循环移位

时间:2011-04-30 19:22:21

标签: java

我想知道如何用k int位表示的位串实现 循环 右移。< / p>

public int rtCircShift(int bits, int k)
{
    return bits >> k;
}

所有这些代码都是返回0 ,我怎样才能使它成为循环移位?

4 个答案:

答案 0 :(得分:35)

你的意思是你想让从右侧旋转的位出现在左边?

return Integer.rotateRight(bits, k);

示例:

int n = 0x55005500; // Binary 01010101000000000101010100000000
int k = 13;
System.err.printf("%08x%n", Integer.rotateRight(n, k));

输出:

a802a802 // Binary 10101000000000101010100000000010

答案 1 :(得分:32)

这应该有效:

 return (bits >>> k) | (bits << (Integer.SIZE - k));

另见Wikipedia article on circular shifts

答案 2 :(得分:7)

The answer之前的{p> schnaader是正确的:

return (bits >>> k) | (bits << (32-k));
  1. 第一部分(bits >>> k)bits中存储的值右移k位,'第三部分>'确保最左边的位为零,而不是bits
  2. 的标志
  3. 第二部分(bits << (32-k))bits中的值左移k - 补码位数
  4. 现在,您有两个临时变量,其中第一个(32-k)位存储在var(1)的最右边位,最后k位存储在var(2)的最左边位。按位或运算简单地将这两个临时变量一起运算(注意使用>>>而不是>>)并且你有循环移位。

答案 3 :(得分:-1)

int x=12345,n=5;
System.out.println((x%10)*Math.pow(10, n-1)+(x/10));

转移一点。