如何否定 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 种算术运算 IADD
、ISUB
、IAND
和 IOR
。您可以使用 ISUB
来实现此目的
为了更有趣,我们可以not_x = x XOR ~0 = (x OR ~0) - (x AND ~0)
自 a XOR b = (a OR b) - (a AND b)
。另一种解决方案是使用查找 table
我正在考虑为 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 种算术运算 IADD
、ISUB
、IAND
和 IOR
。您可以使用 ISUB
来实现此目的
为了更有趣,我们可以not_x = x XOR ~0 = (x OR ~0) - (x AND ~0)
自 a XOR b = (a OR b) - (a AND b)
。另一种解决方案是使用查找 table