我想知道如何用k int
位表示的位串实现 循环 右移。< / p>
public int rtCircShift(int bits, int k)
{
return bits >> k;
}
所有这些代码都是返回0 ,我怎样才能使它成为循环移位?
答案 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)
答案 2 :(得分:7)
return (bits >>> k) | (bits << (32-k));
(bits >>> k)
将bits
中存储的值右移k
位,'第三部分>
'确保最左边的位为零,而不是bits
(bits << (32-k))
将bits
中的值左移k
- 补码位数现在,您有两个临时变量,其中第一个(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));
转移一点。