整数 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] である必要があります