有时候,在ZX Spectrum Basic中编写代码时,我需要评估由两个操作数和逻辑异或运算符组成的逻辑表达式,就像这样:
IF (left operand) xor (right operand) THEN
由于ZX Basic仅了解NOT、OR和AND,因此我不得不采用某种包括多次使用左/右操作数的花式计算。这很麻烦,因为它会消耗时间和内存,如果你在一台8位机器上工作,这两个资源都很稀缺。我想知道是否有巧妙的技巧来模拟异或运算符。
为了测试结果,我提供了一个小代码示例:
5 DEF FN x(a,b)=(a ??? b) : REM the xor formula, change here
10 FOR a=-1 TO 1 : REM left operand
20 FOR b=-1 TO 1 : REM right operand
30 LET r=FN x(a,b) : REM compute xor
40 PRINT "a:";a;" b:";b;" => ";r
50 NEXT b
60 NEXT a
你能帮我找到一个高效的解决方案吗?到目前为止,我尝试了DEF FN x(a,b)=(a AND NOT b) OR (b AND NOT a)
,但它有点笨拙。
编辑:
如果你想测试你的想法,我建议使用BasinC v1.69 ZX模拟器(仅限Windows)。
正如@Jeff指出的那样,大多数BASIC,例如ZX BASIC,将零值视为假,非零值视为真。
我已经适应了样例以测试各种非零值。