今回はBHT-BASICの演算子について説明したいと思います。
BHT-BASICには、算術演算子、関係演算子、論理演算子、関数演算子、文字列演算子と 普通の言語にはだいたいそろっている演算子があります。
■演算子の優先順位
演算子は特に目新しいものは無く、よくあるものばかりですので、 各演算子毎に細かくは記しませんが、少し注意するものをピックアップします。
■算術演算子・剰余演算(MOD)
MODは割り算の余りを返すものです。 以下の例の様に数値は四捨五入し整数にしてからMOD演算が行われます。
■オーバーフローとゼロによる除算
演算結果がオーバーフローしたり、ゼロで割った場合には実行時エラーが発生します。 以下のソースはその例を示します。
■関係演算子について
関係演算子は2個の式を比較して、真「-1」または偽「0」を返します。 この値を使って、プログラムの流れを制御できます。 以下のソースは、IF文を使った各関係演算子の例を示します。
また、関係演算子の計算結果を変数に入れて使うこともできます。
■論理演算子を式で使う
論理演算子は、複数の関係演算子での判定結果を関連付ける演算子です。
■文字列演算子について
文字列の演算では結合しかなく、+マークで行います。 また、数値の様に文字列の比較ができます。
=====
2016/04/02:の時の情報
BHT-BASICには、算術演算子、関係演算子、論理演算子、関数演算子、文字列演算子と 普通の言語にはだいたいそろっている演算子があります。
■演算子の優先順位
優先順位 | 演算子名称 | 演算子 | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 |
括弧 | ( ) 括弧の中が優先して演算 | |||||||||||||||
2 |
関数演算子 | 組込み関数,ユーザ関数の実行 | |||||||||||||||
3 |
算術演算子 | ※演算子の中で更に優先度がある
|
|||||||||||||||
4 |
関係演算子 | = , <> , >< , < , > , <= , >= , =< , => | |||||||||||||||
5 |
論理演算子 | ※演算子の中で更に優先度がある
|
|||||||||||||||
6 |
文字列演算子 |
演算子は特に目新しいものは無く、よくあるものばかりですので、 各演算子毎に細かくは記しませんが、少し注意するものをピックアップします。
■算術演算子・剰余演算(MOD)
MODは割り算の余りを返すものです。 以下の例の様に数値は四捨五入し整数にしてからMOD演算が行われます。
PRIVATE X%, Y%, R% X% = 10 Y% = 3 R% = X% MOD Y% 'X%をY%で割った余り PRINT "R%=" ; R% R% = 10 MOD 4.1 '4.1を四捨五入し結果 10 MOD 4 PRINT "R%=" ; R% R% = -10 MOD -4.5 '-4.5を四捨五入し結果 -10 MOD -5 PRINT "R%=" ; R% Wait 0, &h01 'キー入力待ち END
■オーバーフローとゼロによる除算
演算結果がオーバーフローしたり、ゼロで割った場合には実行時エラーが発生します。 以下のソースはその例を示します。
ON ERROR GOTO MAIN.ERR 'エラー宣言 PRIVATE X%, Y% X% = 32767 '整数型のMAX値 PRINT "TEST-1" Y% = X% / 0 'ゼロで割る PRINT "TEST-2" Y% = X% + 1 '整数型のオーバーフロー Wait 0, &h01 'キー入力待ち END MAIN.ERR: 'エラーコードと発生アドレス表示 PRINT "ERR=" + HEX$(ERR) + " : ERL=" + HEX$(ERL) RESUME NEXT 'エラー発生の次の行に戻る
■関係演算子について
関係演算子は2個の式を比較して、真「-1」または偽「0」を返します。 この値を使って、プログラムの流れを制御できます。 以下のソースは、IF文を使った各関係演算子の例を示します。
また、関係演算子の計算結果を変数に入れて使うこともできます。
SCREEN 1 '標準漢字モードを指定 PRIVATE X% '各関係演算子の例 IF 1 = 1 THEN PRINT "[=] :等しい" ENDIF IF 0 <> 1 THEN PRINT "[<>]:等しくない" ENDIF IF 0 < 1 THEN PRINT "[<] :小さい" ENDIF IF 1 > 0 THEN PRINT "[>] :大きい" ENDIF IF 0 <= 1 THEN PRINT "[<=]:以下" ENDIF IF 1 => 0 THEN PRINT "[=>]:以上" ENDIF PRINT "-----" '比較を式に代入 X% = (1 = 1): PRINT "等しい="; X% X% = (0 = 1): PRINT "等しくない="; X% Wait 0, &h01 'キー入力待ち END
■論理演算子を式で使う
論理演算子は、複数の関係演算子での判定結果を関連付ける演算子です。
OUT &H6080, 1 '小フォントを指定 PRIVATE X%, Y%, Z% 'NOT Z% = NOT(0): PRINT "NOT (0)=" ;Z% Z% = NOT(NOT(0)): PRINT "NOT(NOT((0))=" ;Z% Z% = NOT(1): PRINT "NOT (1)=" ;Z% 'AND Z% = 0 AND 0: PRINT "(0) AND (0)=" ;Z% Z% = 0 AND 1: PRINT "(0) AND (1)=" ;Z% Z% = 1 AND 0: PRINT "(1) AND (0)=" ;Z% Z% = 1 AND 1: PRINT "(1) AND (1)=" ;Z% 'OR Z% = 0 OR 0: PRINT "(0) OR (0)=" ;Z% Z% = 0 OR 1: PRINT "(0) OR (1)=" ;Z% Z% = 1 OR 0: PRINT "(1) OR (0)=" ;Z% Z% = 1 OR 1: PRINT "(1) OR (1)=" ;Z% 'XOR Z% = 0 XOR 0: PRINT "(0) XOR (0)=" ;Z% Z% = 0 XOR 1: PRINT "(0) XOR (1)=" ;Z% Z% = 1 XOR 0: PRINT "(1) XOR (0)=" ;Z% Z% = 1 XOR 1: PRINT "(1) XOR (1)=" ;Z% Wait 0, &h01 'キー入力待ち END
■文字列演算子について
文字列の演算では結合しかなく、+マークで行います。 また、数値の様に文字列の比較ができます。
SCREEN 1 '標準漢字モードを指定 '文字列連結 PRIVATE X$, Y$, Z$ X$ = "123": Y$ = "ABC" Z$ = "連結=" + X$ + ":" + Y$ PRINT Z$ PRINT "-----" '各関係演算子の例 IF "123" = "123" THEN PRINT "[=] :等しい" ENDIF IF "012" <> "123" THEN PRINT "[<>]:等しくない" ENDIF IF "001" < "002" THEN PRINT "[<] :小さい" ENDIF IF "003" > "002" THEN PRINT "[>] :大きい" ENDIF PRINT "-----" '文字列の長さが異なる IF "123" <> "12" THEN PRINT "[<>]:等しくない" ENDIF IF "12" < "123" THEN PRINT "[<] :小さい" ENDIF IF "123" > "12" THEN PRINT "[>] :大きい" ENDIF Wait 0, &h01 'キー入力待ち END
=====
2016/04/02:の時の情報
PR
コメント