我想实现一个向左旋转功能旋转的整数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