2023.5.9
前へ
次へ
ホームページトップへ戻る


PICBASICコンパイラ

〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
まるでインタプリタ。でもコンパイラです。超カンタン超シンプルです。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

[第20回]



●論理演算(3) &(AND)と|(OR)

前回は論理演算での2数の比較について説明をしました。
大抵は前回のように2数を単純に比較するだけのことが多いのですが中にはもっと複雑な条件の組み合わせになる場合もあります。
複数の条件を組み合わせる場合にはANDとORを使います。
CではANDの記号として&&を使いまたORの記号としては||を使います。
それにならってPICBASICコンパイラではANDを&でORを|で示すことにします。
下はそのサンプルプログラムです。

50行はa>bが真でかつc>dが真ならば、という意味で2つの式を&でつないでいます。
60行はa>bが真であるかまたはc>dが真ならば、という意味で2つの式を|でつないでいます。
50行ではa>bは1(真)ですがc>dは0(偽)なので両方のANDの結果は0(偽)になります。
60行はORなのでどちらかが真ならば結果は真(1)になります。

今度は50行の条件を少し変えてみました。

50行はa>bが真でかつc<dが真ならばという意味になって、a>bもc<dも真(1)なので結果は真(1)になります。

ANDとORを組み合わせてもっと複雑な比較を行なうこともできますが…。

この例は何を言いたいのか意味不明です。
一応結果は出ますが本当に正しい結果なのかちょっと疑問です。
&と|には優先順位はありません。
ですから機械的に前から順に演算が行なわれます。

&だけとか|だけの場合には意味が通りますから正しい結果が得られます。

50行のa>bかつc<dかつa<cはいずれも真なので結果は真(1)になります。
60行のa>bまたはc>dまたはa<cはいずれかが真なら結果も真(1)になります。

ひとつ上の式で意味をはっきりさせたい場合には()を使って優先順位を明確に示します。

50行はc<dが真であるかまたはa>cが真である場合に、a>bが真ならば、という意味になるので結果は真(1)になります。
60行はa>bが真かc<dが真である場合に、a>cが真ならば、という意味になって最後のa>cが偽なので結果は偽(0)になります。
このように同じ式でも()をどこにつけるかで意味が異なってきて結果も異なってきます。
このあたりになると図でも描いてじっくり考えないと間違った式を書いてしまいそうです。

PICBASICコンパイラ[第20回]
2023.5.9upload

前へ
次へ
ホームページトップへ戻る