【发布时间】:2014-10-04 16:10:46
【问题描述】:
如何在运行时旋转给定数字的位,输入旋转数?
例如:
binary: 10000000000000000000000000001011
rotations: 3 times right
result: 01110000000000000000000000000001
同样:
binary 10000000000000000000000000001011
rotations: 4 times left
result: 00000000000000000000000010111000
下面是我要交换的代码,但我找不到旋转位的逻辑。
#include<stdio.h>
int main()
{
int num,bitleft,bitright,i,j;
printf("enter ur number\n");
scanf("%d",&num);
for(i=31,j=0;i>j;i--,j++)
{
bitleft=num>>i&1; //storing bits in integer from left
bitright=num>>j&1; //storing bits in integer from right
if(bitleft!=bitright) // checking if bits are not similarly
{
num=num^1<<i; // not similar then complement
num=num^1<<j;
}
}
printf("\n");
for(j=31;j>=0;j--) // loop to print swapped bits
{
if(num&1<<j)
printf("1");
else
printf("0");
}
}
【问题讨论】:
-
@user3859409 “运行时没有旋转”是什么意思?
-
Wikipedia 提供了一个非常干净的实现
-
要将
num向左旋转k位,请写入(num << k) | (num >> (sizeof(num)*CHAR_BIT - k))。 -
尽可能使用
asm("...")。