今天,我一直在尝试编写一个函数,它应该将给定的 64 位整数 n 位向右旋转,如果 n 为负数,也向左旋转。当然,整数以外的位应在另一侧轮换。
我保持功能非常简单。
void rotate(uint64_t *i, int n)
uint64_t one = 1;
if(n > 0) {
do {
int storeBit = *i & one;
*i = *i >> 1;
if(storeBit == 1)
*i |= 0x80000000000000;
n--;
}while(n>0);
}
}
可能的输入是:
uint64_t num = 0x2;
rotate(&num, 1); // num should be 0x1
rotate(&num, -1); // num should be 0x2, again
rotate(&num, 62); // num should 0x8
不幸的是,我无法弄清楚。我希望有人能帮助我。
编辑:现在,代码在线。对不起,花了一段时间。我与编辑有一些困难。但我只是为了向右旋转而这样做。缺少向左的旋转,因为我没有这样做。