我正在尝试实现一个左旋转函数,它将整数 x 左旋转 n 位
- 例如:rotateLeft(0x87654321,4) = 0x76543218
- 法律行动:~ & ^ | + << >>
到目前为止,我有这个:
int rotateLeft(int x, int n) {
return ((x << n) | (x >> (32 - n)));
}
我已经意识到不适用于有符号整数..有没有人知道如何解决这个问题?
所以现在我尝试了:
int rotateLeft(int x, int n) {
return ((x << n) | ((x >> (32 + (~n + 1))) & 0x0f));
}
并收到错误:
错误:测试 rotateLeft(-2147483648[0x80000000],1[0x1]) 失败... ...给出 15[0xf]。应该是 1[0x1]