位旋转 -—— 旋转(或循环移位)是类似于移位的操作, 不同的是一端脱落的那一位会被放回到另一端
在左旋转中, 左端掉下来的那一位会放在右端
假设 n 用 8 位二进制来存. 对 n = 11100101
左旋转 3
位, 得到 n = 00101111
(左移3位, 原先的前3位放在末尾).
如果 n 用 16 位或 32 位二进制来存, 那么对 n (000…11100101
)左旋转了之后会变成 (00..0011100101000
).
在本问题中, 你可以假设 n 是用 32
位二进制来存的.
给定待旋转的n
,和左移的位数d
,输出左旋转后的值
样例
样例1
输入: n = 123, d = 4
输出: 1968
解释:
0000,0000,0000,0000,0000,0000,0111,1010 --> 0000,0000,0000,0000,0000,0111,1010,0000
样例2
输入: n = 127, d = 8
输出: 32512
解释:
0000,0000,0000,0000,0000,0000,1111,1111 --> 0000,0000,0000,0000,1111,1111,0000,0000
class Solution {
public:
/**
* @param n: a number
* @param d: digit needed to be rorated
* @return: a number
*/
int leftRotate(int n, int d)
{
// write code here
for(int i = 0; i < d; i++)
{
int high = n & 0x80000000;
n = n << 1;
if(high)
{
n = n | 1;
}
else
{
n = n & 0xFFFFFFFE;
}
}
return n;
}
};