15

ZX Spectrum Basic でコーディングする場合、次のように 2 つのオペランドと論理 xor で構成される論理式を評価する必要がある場合があります。

IF (left operand) xor (right operand) THEN

ZX Basic は NOT、OR、および AND しか認識しないため、左/右オペランドの複数の使用を含むある種の凝った計算に頼らなければなりません。これは、時間とメモリを消費するため厄介です。8 ビット マシンで作業している場合はどちらもまばらです。xor 演算子を模倣する巧妙なトリックがあるのだろうか。

結果をテストするために、小さなコード サンプルを提供します。

 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が指摘したように、ZX one'sなどのほとんどの基本は、ゼロ値をfalseと見なし、ゼロ以外の値をtrueと見なします。

ゼロ以外のさまざまな値でテストするようにサンプルを調整しました。

4

4 に答える 4

5
DEF FN x(a,b)=((NOT a) <> (NOT b))

NOTブール値への強制として使用します。

編集以前はNOT NOT、一方がまだ強要されるため、2 つの間の違いを確立するのに不必要なそれぞれの側がありました!

EDIT 2優先順位の問題を整理するために括弧を追加しました。

于 2017-09-22T18:37:28.850 に答える