演算子の優先順位

1つの式の中で複数の演算が行われるとき、式の各部分は一定の順序に従って評価されます。この順序を演算子の優先順位と呼びます。

優先順位が同じ場合、左から順に行われます。

演算子 優先順位
( ) ↑高
!
*、/、MOD
+、–
>、<、=、>=、<=、<>
AND
OR、XOR ↓低

途中式の最後の計算が算術演算子なら数値が、比較演算子ならブール値(TrueまたはFalse)が返ります。計算に使われるときTrueは1、Falseは0として扱われます。

PRINT 2 + 6 – 4   // (2 + 6) – 4 = 8 – 4
結果
4
PRINT 1 + (2 < 3)   // 1 + TRUE = 1 + 1
結果
2
PRINT 1 + 2 < 3   // (1 + 2) < 3 = 3 < 3
結果
False
PRINT 2 < 3 + 1   // 2 < (3 + 1) = 2 < 4
結果
True
PRINT 13 MOD 4 + 3   // (13 MOD 4) + 3 = 2 + 2
結果
4

括弧による優先順位の変更

演算子の優先順位と異なる順序で演算を行いたい場合、括弧を使用します。より内側にある括弧の方が優先順位は高くなります。

「2 + 4 * 6」の場合「+」よりも「*」の方が優先順位が高いので「4 * 6」が先に計算されます。

PRINT 2 + 4 * 6	// 2 + (4 * 6) = 2 + 24 = 26

「2 + 4」を先に計算したい場合は括弧で囲み優先順位を上げます。

PRINT (2 + 4) * 6	// 6 * 6 = 36

算術演算子

算術演算子は、2つ以上の数値から1つの値を計算したり、数値の符号を変換するために使います。

記法は、操作対象の中間に演算子を記述する中置記法ちゅうちきほうです。

加算演算子(+)は文字列を結合するための連結演算子としても使われます。

演算子 記述例 用途
+ a + b aにbを加算した値
a – b aからbを減算した値
* a * b aにbを乗算した値
/ a / b aからbを除算した値
MOD a MOD b aからbを除算した余り

ゼロ除算

UWSCでは0で割った結果はエラーにならず0になります。

PRINT 5 / 0
結果
0

MOD(剰余演算)

剰余演算は、ある数値を別の数値で除算し余りを取得する演算をします。

以下の二つは同じ結果を返します。

dividend MOD divisor
dividend – INT(dividend / divisor) * divisor

23を4で除算した余りを求めるには、以下のように記述します。結果は「3」です。

PRINT 23 MOD 4

比較演算子

比較演算子は、値を比較しTrue、False、またはNullの結果を返すために使います。戻り値の型はブール型(Boolean)です。

演算子 記述例 用途
< a < b aがbよりも小さいときTrue
<= a <= b aがb以下のときTrue
> a > b aがbよりも大きいときTrue
>= a >= b aがb以上のときTrue
= a = b aとbが等しいときTrue
<> a <> b aとbが等しくないときTrue

論理演算子

演算子 記述例 用途
AND a AND b aとbがTrueのときTrue
OR a OR b aまたはbのいずれかもしくは両方がTrueのときTrue
XOR a XOR b aまたはbのいずれか一方がTrueのときTrue

AND(論理積)

論理積とは、与えられた条件がすべて真のとき真を返します。

a b 結果
TRUE TRUE TRUE
TRUE FALSE FALSE
FALSE TRUE FALSE
FALSE FALSE FALSE
PRINT TRUE AND TRUE			// TRUE
PRINT TRUE AND FALSE		// FALSE
PRINT FALSE AND TRUE		// FALSE
PRINT FALSE AND FALSE		// FALSE

特定のビットが真か偽かを調べるにも使われます。PEEKCOLORで特定の色成分を取得するときに使えます。

例えば、PEEKCOLORをBGR値で取得した値が「4175219(00111111 10110101 01110011 )」のとき。

PEEKCOLOR 赤

「c AND $FF」で赤成分01110011(0x73)を取得。

PEEKCOLOR 緑

「(c AND $FF00) / $100」で緑成分10110101(0xB5)を取得。

PEEKCOLOR 青

「(c AND $FF0000) / $10000」で青成分00111111(0x3F)を取得。

OR(論理和)

論理和とは、与えられた条件のうち一つでも真のとき真を返します。

a b 結果
TRUE TRUE TRUE
TRUE FALSE TRUE
FALSE TRUE TRUE
FALSE FALSE FALSE
PRINT TRUE OR TRUE		// TRUE
PRINT TRUE OR FALSE		// TRUE
PRINT FALSE OR TRUE		// TRUE
PRINT FALSE OR FALSE	// FALSE

XOR(排他的論理和)

排他的論理和とは、与えられた二つの条件のうちどちらか片方が真のとき真を返します。

a b 結果
TRUE TRUE FALSE
TRUE FALSE TRUE
FALSE TRUE TRUE
FALSE FALSE FALSE
PRINT TRUE XOR TRUE			// FALSE
PRINT TRUE XOR FALSE		// TRUE
PRINT FALSE XOR TRUE		// TRUE
PRINT FALSE XOR FALSE		// FALSE

連結演算子

文字列の連結には加算演算子(+)を使います。これは算術演算子の和を求めるときの記号と同じです。和を求めるか連結するかは、操作対象の型によって異なります。

加算演算子は、演算子の両側が数値の場合は加算、それ以外の場合は結合になります。

例えば以下の場合、左から順に処理されていくので「”12+3=” + 12」で文字列になってしまい、「12 + 3」は「15」ではなく「123」と出力されてしまいます。

PRINT “12+3=” + 12 + 3		// (“12+3=” + 12) + 3 = 123

この場合( )を使い数値同士の加算を先に行うことで、「15」と出力されるようになります。

PRINT “12+3=” + (12 + 3)		// 15

数値を文字列として結合したい場合は先頭に「””」を記述することで数値を文字列にすることができます。

以下の場合変数a,bともに数値なので、結合ではなく加算されて「51」と出力されてしまいます。

DIM a = 45
DIM b = 6
PRINT a + b		// 51

「”” + a」で文字列になるので、「a + b」を結合して「456」と出力することができます。

DIM a = 45
DIM b = 6
PRINT “” + a + b		// (“” + a) + b = 456