我想實現一個向左旋轉功能旋轉的整數x n位按位向左旋轉功能
離開- 例:rotateLeft(0x87654321,4)= 0x76543218
- 法律OPS:〜&^| + < < >>
到目前爲止,我有這樣的:
int rotateLeft(int x, int n) {
return ((x << n) | (x >> (32 - n)));
}
,我已經意識到,爲簽署integers..does人不行有任何想法,如何解決這一問題?
所以現在我想:
int rotateLeft(int x, int n) {
return ((x << n) | ((x >> (32 + (~n + 1))) & 0x0f));
}
,並收到錯誤消息:
ERROR:測試rotateLeft(-2147483648 [0x80000000的],1個[爲0x1])失敗... ...給15 [0xf]。應該是1 [0x1]
想想爲什麼你的表達式不適用於帶符號整數,以及你可以對or-運算符右邊的部分做些什麼來使其有效。另外請注意,'-'不是您的合法運營商列表的一部分,所以您也需要修復。 – 2012-04-13 03:32:00
好,所以我想我想出瞭如何擺脫 - (32 +(〜n + 1)),但我很難找出我能做什麼之後|做這個工作 – asdfghjkl 2012-04-13 03:43:54
你能創建一個掩碼和多餘的1位嗎? – 2012-04-13 03:46:14