我想知道如何用位表示的位串实现循环右移int.
public int rtCircShift(int bits, int k)
{
return bits >> k;
}
Run Code Online (Sandbox Code Playgroud)
所有这些代码都返回0,我怎样才能使它成为循环移位?
fin*_*nnw 37
你的意思是你希望从右侧旋转的位出现在左侧?
return Integer.rotateRight(bits, k);
Run Code Online (Sandbox Code Playgroud)
例:
int n = 0x55005500; // Binary 01010101000000000101010100000000
int k = 13;
System.err.printf("%08x%n", Integer.rotateRight(n, k));
Run Code Online (Sandbox Code Playgroud)
输出:
a802a802 // Binary 10101000000000101010100000000010
Run Code Online (Sandbox Code Playgroud)
sch*_*der 33
这应该工作:
return (bits >>> k) | (bits << (Integer.SIZE - k));
Run Code Online (Sandbox Code Playgroud)
另请参阅维基百科有关循环转换的文章.
小智 8
return (bits >>> k) | (bits << (32-k));
Run Code Online (Sandbox Code Playgroud)
(bits >>> k)右移存储在值bits由k比特和"第三>"确保了最左边的位是零,而不是符号的bits(bits << (32-k))左移该值bitsk现在,您有两个临时变量,其中第一个(32-k)位存储在var(1)的最右边位,最后k位存储在var(2)的最左边位.按位或运算简单地将这两个临时变量一起运算(注意使用>>>而不是>>)并且你有循环移位.