相关疑难解决方法(0)

按位向左旋转功能

我正在尝试实现一个旋转左侧函数,它将整数x向左旋转n位

  • 例如:rotateLeft(0x87654321,4)= 0x76543218
  • 法律操作:〜&^ | + << >>

到目前为止我有这个:

int rotateLeft(int x, int n) {
  return ((x << n) | (x >> (32 - n)));
}
Run Code Online (Sandbox Code Playgroud)

我已经意识到不能为签名整数工作..任何人都有任何想法如何解决这个问题?

所以现在我试过了:

int rotateLeft(int x, int n) {
  return ((x << n) | ((x >> (32 + (~n + 1))) & 0x0f));
}
Run Code Online (Sandbox Code Playgroud)

并收到错误:

错误:测试rotateLeft(-2147483648 [0x80000000],1 [0x1])失败...... ...给出15 [0xf].应为1 [0x1]

c

10
推荐指数
3
解决办法
5万
查看次数

标签 统计

c ×1