Contents
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(剰余演算)
剰余演算は、ある数値を別の数値で除算し余りを取得する演算をします。
被除数 MOD 除数という書き方をします。
dividend MOD divisor
MODを使わずに書くと以下のようになります。
dividend - INT(dividend / divisor) * divisor
23を4で除算した余りを求めるには、以下のように記述します。結果は3です。
PRINT 23 MOD 4
符号のありなしによる結果の違い。結果は被除数の符号と同じになります。
PRINT 23 MOD 4
PRINT -23 MOD 4
PRINT 23 MOD -4
PRINT -23 MOD -4
- 結果
3 -3 3 -3
除数が-0.5〜0.5の場合、結果はエラーになります。
比較演算子
比較演算子は、値を比較するときに利用する演算子です。結果は真を意味するTrueか偽を意味するFalseのいずれかを返します。主にIF文などの条件分岐処理を書くときの条件式で使われます。
演算子 | 記述例 | 用途 |
---|---|---|
< | 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 |
論理演算子
論理演算またはビット演算を行います。演算の結果は倍精度浮動小数点型(Double型)です。論理演算ではTrueを1、Falseを0として扱われます。
演算子 | 記述例 | 用途 |
---|---|---|
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(論理積)
論理積とは、与えられた条件がすべて真のとき真を返します。論理積の記号は「\(\cdot\)」で表します。

\(a\) | \(b\) | \(a \cdot b\) |
---|---|---|
TRUE | TRUE | TRUE |
TRUE | FALSE | FALSE |
FALSE | TRUE | FALSE |
FALSE | FALSE | FALSE |
PRINT TRUE AND TRUE // 1
PRINT TRUE AND FALSE // 0
PRINT FALSE AND TRUE // 0
PRINT FALSE AND FALSE // 0
特定のビットが真か偽かを調べるにも使われます。PEEKCOLOR関数 (スクリプト関数)で特定の色成分を取得するときに使えます。
例えば、PEEKCOLORをBGR値で取得した値が4175219(00111111 10110101 01110011)のとき。

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

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

(c AND $FF0000) / $10000で青成分00111111(0x3F)を取得。
OR(論理和)
論理和とは、与えられた条件のうち一つでも真のとき真を返します。論理和の記号は「\(+\)」で表します。

\(a\) | \(b\) | \(a + b\) |
---|---|---|
TRUE | TRUE | TRUE |
TRUE | FALSE | TRUE |
FALSE | TRUE | TRUE |
FALSE | FALSE | FALSE |
PRINT TRUE OR TRUE // 1
PRINT TRUE OR FALSE // 1
PRINT FALSE OR TRUE // 1
PRINT FALSE OR FALSE // 0
XOR(排他的論理和)
排他的論理和とは、与えられた二つの条件のうちどちらか片方が真のとき真を返します。排他的論理和の記号は「\(\oplus\)」で表します。

\(a\) | \(b\) | \(a \oplus b\) |
---|---|---|
TRUE | TRUE | FALSE |
TRUE | FALSE | TRUE |
FALSE | TRUE | TRUE |
FALSE | FALSE | FALSE |
PRINT TRUE XOR TRUE // 0
PRINT TRUE XOR FALSE // 1
PRINT FALSE XOR TRUE // 1
PRINT FALSE XOR FALSE // 0
連結演算子
文字列の連結には加算演算子(+)を使います。これは算術演算子の和を求めるときの記号と同じです。和を求めるか連結するかは、操作対象の型によって異なります。
加算演算子は、演算子の両側が数値の場合は加算、それ以外の場合は結合になります。
例えば以下の場合、左から順に処理されていくので"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
使い方
PRINT "■AND"
PRINT 100 AND 12 // 4 0110 0100 AND 1100 = 0100
PRINT -100 AND 12 // 12 1001 1100 AND 1100 = 1100
PRINT 100 AND -12 // 100 0110 0100 AND 1111 0100 = 0110 0100
PRINT -100 AND -12 // -108 1001 1100 AND 1111 0100 = 1111 1111 1001 0100
PRINT 385 AND 126 // 0 0001 1000 0001 AND 0111 1110 = 0000
PRINT -45 AND -54 // -62 1101 0011 AND 1100 1010 = 1111 1111 1100 0010
PRINT -243 AND 124 // 12 0000 1101 AND 0111 1100 = 1111 0000 1100
PRINT 385 AND -19 // 385 0000 0001 1000 0001 AND 1111 1111 1110 1101 = 0001 1000 0001
PRINT 12 AND -24 // 8 1100 AND 1110 1000 = 1000
PRINT -10 AND -8 // -16 1111 0110 AND 1111 1000 = 1111 1111 1111 0000
PRINT
PRINT "■OR"
PRINT 239 OR 21 // 255 1110 1111 OR 0001 0101 = 1111 1111
PRINT 382 OR -14 // -2 0001 0111 1110 OR 1111 1111 1111 0010 = 1111 1111 1111 1110
PRINT 98 OR 13 // 111
PRINT -24 OR -25 // -17 1111 1111 1110 1000 OR 1111 1111 1110 0111 = 1111 1111 1110 1111
PRINT -128 OR -28 // -28 1111 1111 1000 0000 OR 1111 1111 1110 0100 = 1111 1111 1110 0100
PRINT -1278 OR -128 // -126 1111 1011 0000 0010 OR 1111 1111 1000 0000 = 1111 1111 1000 0000
PRINT 845 OR -213 // -145 0011 0100 1101 OR 1111 1111 0010 1011 = 1111 1111 0110 1111
PRINT -84329 OR -8429 // -105 1111 1110 1011 0110 1001 0111 OR 1111 1111 1101 1111 0001 0011 = 1111 1111 1111 1111 1001 0111
PRINT
PRINT "■XOR"
PRINT 124 XOR 24 // 100 0111 1100 XOR 0001 1000 = 0110 0100
PRINT 89 XOR -12 // -83 0101 1001 XOR 1111 0100 = 1111 1111 1010 1101
PRINT -39 XOR 35 // -6 1101 1001 XOR 0010 0011 = 1111 1111 1111 1010
PRINT -384 XOR -24 // 360 1111 1110 1000 0000 XOR 1111 1111 1110 1000 = 0001 0110 1000
PRINT -5758 XOR -1231 // 4787 1110 1001 1000 0010 XOR 1111 1011 0011 0001 = 0001 0010 1011 0011
PRINT 29843 XOR -24829 // -5232 0111 0100 1001 0011 XOR 1001 1111 0000 0011 = 1110 1011 1001 0000