如何否定 IJVM 中的数字?

How to negate a number in IJVM?

我正在考虑为 IJVM 实现 NOT operation/instruction 的方法,以便我可以编写乘法 JAS 方法,但我在尝试实现否定方法时遇到了问题。

任何人都可以帮忙解决这个问题吗?

基本上有多种方法可以计算一个值的补码,即 NOT:

not_x = NAND(x, x) = NAND(x, ~0);
not_x = NOR(x, x) = NOR(x, 0);
not_x = -x - 1; // because in 2's complement -x = ~x + 1
not_x = 0xFFFFFFFF - x;   // assuming 32-bit computer
not_x = x XOR 0xFFFFFFFF; // or x XOR ~0
...

我不知道 IJVM,但正如所描述的那样 here 它仅支持 4 种算术运算 IADDISUBIANDIOR。您可以使用 ISUB 来实现此目的

为了更有趣,我们可以not_x = x XOR ~0 = (x OR ~0) - (x AND ~0)
a XOR b = (a OR b) - (a AND b)。另一种解决方案是使用查找 table