因此,我正在尝试解决这项家庭作业,但我已经被这个特定问题困扰了几个小时,但无法解决。我感觉我是如此接近!但后来我改变了代码中的一些东西,还有一些东西是不对的..
/*
* logicalShift - shift x to the right by n, using a logical shift
* Can assume that 0 <= n <= 31
* Examples: logicalShift(0x87654321,4) = 0x08765432
* Legal ops: ! ~ & ^ | + << >>
* Max ops: 20
* Rating: 3
*/
int logicalShift(int x, int n) {
int move;
int y;
y = x >> n;
y = ~y << 1;
move = (y & (x >> n));
return move;
}
这里缺少什么?我明白了0x80000000 >> 31
作为 0 但应该是 1 - 但除此之外我不知道..
如果是逻辑移位,则 0x80000000 >> 31 = 1。
0x80000000 >> 31 = -1(如果是算术移位)。
在C++中,如果被移位的值是无符号的,则它是逻辑移位。
在爪哇,>>
是算术移位。>>>
是逻辑移位。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)