我需要实现一个向左旋转 int 的最后 10 位的函数。
所以如果一个 int 有值
0b 1111 0000 0000 0000 0000 1100 1100 0000
左旋转 2 会给我们
0b 1111 0000 0000 0000 0000 1111 0000 0000
进一步向左旋转 1 将给出
0b 1111 0000 0000 0000 0000 1110 0000 0001
ptr
- 指向我们要旋转的给定 int 的指针n
- 我们想要旋转多少次
void leftRotateLast10Digits(int * ptr, int n) {
}
如果我们想旋转整个 int,我知道该怎么做,但我不确定如何只对最后 10 位数字进行操作。我想左旋转一个int,它看起来像下面这样。但是,我仍然不明白如何只旋转最后 10 位数字。
void leftRotate(int * ptr, int n) {
int DROPPED_MSB;
int INT_BITS = sizeof(int) * 8 - 1;
int num = *ptr;
// The effective rotation
n %= INT_BITS;
while(n) {
DROPPED_MSB = (num >> INT_BITS) & 1;
// Left rotate num by 1 and set its dropped MSB as new LSB
num = (num << 1) | DROPPED_MSB;
n--;
}
*ptr = num;
}