使用位操作表示(32-n)而没有“ - ”符号

时间:2015-10-08 02:58:36

标签: c

所以我目前正在开发一个涉及类操作的项目,其中一个规定是我们不能使用“ - ”符号表示任何东西(例如,而不是写-1我必须写〜0)

我想做一个右移n位,但我不能做像5>>这样的事情。 (32 - n)由于“ - ”符号,我很难知道如何做到这一点。

有人可以开导我吗?

3 个答案:

答案 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不会左移到右移。