所以我目前正在开发一个涉及类操作的项目,其中一个规定是我们不能使用“ - ”符号表示任何东西(例如,而不是写-1我必须写〜0)
我想做一个右移n位,但我不能做像5>>这样的事情。 (32 - n)由于“ - ”符号,我很难知道如何做到这一点。
有人可以开导我吗?
答案 0 :(得分:3)
在评论中你说真正的用例是:
x >> (32 - n)
您允许使用位反转(例如~0
代替-1
),所以只需执行以下操作:
x >> (32+(n * ~0)) // Straightforward negate of n using substitute for -1
或
x >> (33 + ~n) // Direct use of two's complement to get -n, since -n == (~n) + 1
答案 1 :(得分:2)
好吧这有点严重而且效率不高,但我认为这更像是一个理论实验,而不是任何人都会做的事情。
您可以使用~0表示-1(这会将0的所有位反转,以便设置所有位。在常规处理器上为-1)。 所以如果你想要-n你可以去n *(〜0)
5 >> (32 + ((~0) * n))
答案 2 :(得分:1)
n位的右移将使用“>>”操作
5 >> n;
你给出的5<<< (32-n)是左移。 32-n不会左移到右移。